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

how can i reverse back to home page without reload it

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

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。 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 可能会在这方面有所帮助,但会针对您的站点非常具体。