如何在Django中使用HttpResponseRedirect时传递模板上下文信息?

53 投票
7 回答
39164 浏览
提问于 2025-04-15 14:31

我有一个表单,当用户输入信息后会重定向到同一个页面(这样他们可以继续输入信息)。如果表单提交成功,我会返回

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 来解析这个变量,并显示相应的信息。

撰写回答