如何在Django中使用HttpResponseRedirect时传递模板上下文信息?
我有一个表单,当用户输入信息后会重定向到同一个页面(这样他们可以继续输入信息)。如果表单提交成功,我会返回
HttpResponseRedirect(request.path)
这样做是没问题的。不过,我还想在这种情况下给用户显示一些消息(比如在屏幕顶部显示“您的数据已保存”)。如果不进行重定向,我可以直接在上下文字典中返回这些消息。但是使用重定向的话,我就无法这样做了。
那么,在使用HttpResponseRedirect时,我该如何传递模板上下文信息呢?
我想做的事情听起来应该是非常常见的,所以如果我漏掉了什么明显的东西,请多多包涵。
7 个回答
14
如果你在使用认证功能,并且有一个已登录的用户,你可以:
GET参数也是可以被修改的。正如其他回答中提到的,查询字符串可以被利用。
我认为最好的方法是使用会话框架。这样你可以在上下文中加载你想要的任何内容,然后得到
{{ request.session.foo }}
foo
可以是消息,或者你可以这样做:
{% ifequal request.session.foo 1 %} Nice work! {% else %} Almost! {% endifequal %}
还有其他有趣的东西。
75
为了让大家更全面了解和方便以后查阅,现在你可以使用 消息框架。安装好之后:
views.py
from django.contrib import messages
def view(request):
# your code
messages.success(request, "Your data has been saved!")
HttpResponseRedirect(request.path)
template.html
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
8
最好的办法可能是使用一种编码的查询字符串在重定向的链接上……这是一种老派的做法。
你可以这样做:
/page/?m=1,/page/?m=2,等等。
然后你可以在视图代码中用 request.GET 来解析这个变量,并显示相应的信息。