如何在不重新加载的情况下反转回主页

时间:2015-02-06 04:49:11

标签: python ajax django dajax

在我的项目中,我有2个模型文章和引用。每次用户单击主页中的按钮时,它都会将相关引用添加到用户的文章中。

Article.models看起来像这样:

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中:

{% 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>

确实有效。但是,它也重新加载主页。因此,当我向下滚动并单击按钮时,页面将返回到顶部,并且不会停留在我点击的位置。

我做了一些研究,发现dajax可能会有所帮助但只是不知道如何用它或其他有效方法解决我的问题?

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题,我建议你同时实施它们。

1。无Javascript方法。

包含每个引号的锚点,因此当您重定向时,您可以像这样重定向:

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

看起来像:

http:example.com#quote_id_123

跳转到具有该ID的元素,例如:

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

这意味着没有Javascript(仍然是令人惊讶的金额)的用户可以获得跳转到正确位置的功能。

要做到这一点,你可以改变你的for循环:

{% 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。使用渐进增强功能添加Javascript

这不那么简单,并且需要编写比上面更多的代码,但基本上需要通过一些ajax方法提交表单,正确捕获响应(或错误),以及更新页面。

Dajax和jQuery可能会在这方面提供帮助,但对您的网站非常具体。