2015-02-06 2 views
1

내 프로젝트에는 기사 및 견적이 2 개 있습니다. 사용자가 홈 페이지에서 버튼을 클릭 할 때마다 사용자의 기사에 관련 인용 부호가 추가됩니다.다시로드하지 않고 홈 페이지로 되돌릴 수있는 방법

Article.models는 다음과 같다 :

{% for quote in quotes %} 
<p>{{ quote.description }}</p> 
<p><a class="btn btn-primary" href="{{ quote.get_absolute_url }}" 
role="button" data-container="body" data-toggle="popover" 
data-placement="top" data-content="added">collect &raquo;</a></p> 

그것은 작업을 수행합니다

여기
class Article(models.Model): 
    user = models.OneToOneField(User, null=True) 
    quote = models.ManyToManyField(Quote, blank=True, null=True) 
    def __unicode__(self): 
     return self.user.username 

는 view.py에게

def add_quote(request, id): 
    u = User.objects.get(username=request.user) 
     a = Article.objects.get(user=u) 
    q = Quote.objects.get(id=id) 
    a.quote.add(q) 
    a.save() 

    return HttpResponseRedirect(reverse("home")) 

home.html을합니다. 그러나 홈 페이지도 새로 고침됩니다. 그래서 아래로 스크롤하여 버튼을 클릭하면 페이지가 맨 위로 돌아가고 클릭 할 곳이 그대로 유지됩니다.

나는 dajax가 도움이 될지도 모르는 약간의 연구를했다. 그러나 그것 또는 다른 효율적인 방법으로 나의 문제를 어떻게 해결할 것인지 전혀 모른다.

답변

1

이 문제를 해결하는 방법은 두 가지가 있으며 두 가지 방법을 모두 구현하는 것이 좋습니다.

1. 자바 스크립트가없는 방법.

각 견적 앵커를 포함, 그래서 당신이 리디렉션 때과 같이 재 지정할 수 있습니다 :

HttpResponseRedirect(reverse("home")+"#quote_id_%s"%(q.id)) 

가 어떤 모양을 :

http:example.com#quote_id_123 

그리고 아이디, 등으로 요소로 이동합니다 :

<blockquote id="quote_id_123">Four score and seven years ago...</blockquote> 

즉, 자바 스크립트가없는 사용자 (여전히 놀라운 금액 임)는 올바른 위치로 점프하는 기능.

이 당신이 변경할 수 있습니다 이렇게하려면 당신과 같이 루프 :이 덜 솔직하고, 더 많은 코드를 작성할 필요합니다 자바 스크립트

를 추가 할 수

{% for quote in quotes %} 
    <p id="quote_id_{{quote.id}}">{{ quote.description }}</p> 
    <p><a class="btn btn-primary" href="{{ quote.get_absolute_url }}" 
    <!-- etc ... --> 
{% endfor %} 

2. 점진적 개선 기본적으로 일부 ajax 메서드를 통해 양식을 제출하고 응답 (또는 오류)을 올바르게 캡처 한 다음 페이지를 업데이트해야합니다.

Dajax와 jQuery는 아마도 이와 관련하여 도움이 될 것입니다. 그러나 귀하의 사이트에는 매우 구체적입니다.

+0

감사합니다. 샘. 첫 번째 접근법은 꽤 잘 작동합니다. 두 번째 접근 방식에 대해 더 많이 보여줄 수 있습니까? – Leonsion