如何在不重新加载的情况下返回主页
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 »</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 可能会在这方面有所帮助,但会针对您的站点非常具体。
在我的项目中,我有 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 »</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 可能会在这方面有所帮助,但会针对您的站点非常具体。