我有一个POST表格的页面,其动作设置为某个URL .
假设此页面网址为 /form_url/
:..
/submit_url/
中的视图处理表单数据 . 在此之后,我想返回带有成功消息的表单的同一页面 . 在关注POST表单的视图中,我使用 HttpResponseRedirect
,以便从浏览器中获取表单数据 . 但是这样我就无法在表单页面中显示消息,除非我做了类似的事情:
return HttpResponseRedirect("/form_url/?success=1")
然后在模板中检查此参数 . 我不喜欢这种方式,因为如果用户刷新页面,他仍然会看到成功消息 .
我注意到在django管理站点中,删除/添加对象确实在POST提交后使用重定向,并且仍以某种方式显示成功消息 . 怎么样?
我已经简要地看过django“messaging”应用程序,但我想知道它是如何工作的......
4 回答
django管理员使用
django.contrib.messages
,您可以像这样使用它:在你看来:
在您的模板中:
Django消息框架将消息存储在会话或cookie中(取决于storage backend) .
您无需执行重定向即可清除表单数据 . 您需要做的就是重新实例化表单:
如果用户刷新页面,他们将发起GET请求,
success
将为False
. 无论哪种方式,表单将在GET或成功的POST上解除绑定 .如果您利用messages framework,您仍然需要在模板中添加条件以显示消息(如果存在或不存在) .
https://docs.djangoproject.com/en/1.11/ref/contrib/messages/