Jef*_*eff 38 python django redirect http
我有一个表单,在用户输入信息后重定向到同一页面(以便他们可以继续输入信息).如果表单提交成功,我将返回
HttpResponseRedirect(request.path)
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.但是,在这种情况下,我还想向用户显示一些消息(例如,屏幕顶部的"您的数据已保存").如果我没有重定向,我只是在上下文字典中返回这些消息.但是,通过重定向,我无法做到这一点.
那么在使用HttpResponseRedirect时如何传递模板上下文信息呢?
我正在尝试做的事情似乎非常普遍,所以如果我遗漏了一些明显的东西,请原谅.
Joã*_*sce 55
为了完成和将来的参考,您现在可以使用消息框架.安装后:
views.py
from django.contrib import messages
def view(request):
# your code
messages.success(request, "Your data has been saved!")
HttpResponseRedirect(request.path)
Run Code Online (Sandbox Code Playgroud)
template.html
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
Sky*_*and 11
如果您使用auth并拥有登录用户,您可以:
http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.message_set.create
GET params也是hackable.可以使用其他答案中提到的查询字符串.
我认为最优选的方式是使用会话框架.这样你就可以在上下文中加载你想要的任何内容并获得
{{ request.session.foo }}
Run Code Online (Sandbox Code Playgroud)
foo
可能是消息或你可以做:
{% ifequal request.session.foo 1 %} Nice work! {% else %} Almost! {% endifequal %}
Run Code Online (Sandbox Code Playgroud)
和其他有趣的东西.
http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views
最好的方法可能是在重定向URL上使用编码的查询字符串......这是一种旧式的方法.
你可以做点什么
/ page /?m = 1,/ page /?m = 2等
然后,您将在视图代码中使用request.GET解析该变量并显示相应的消息.
你不能.HttpResponseRedirect向浏览器发送客户端重定向(HTTP状态代码302),然后浏览器重新请求另一个页面.
您可以在重定向上设置URL查询字符串,但这对用户和任何拦截HTTP请求(即代理)的人都是可见的,因此不适用于敏感信息.
从你的views.py中,你必须将一个键/值对放入会话中,然后从HTML模板中读取它。
例如:
视图.py
# your code here
request.session['vote'] = 1
return HttpResponseRedirect(request.path)
Run Code Online (Sandbox Code Playgroud)
你的模板.html
{% ifequal request.session.vote 1 %}
<!-- Your action here -->
{% endifequal %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24806 次 |
最近记录: |