在我的Django应用程序中,我有多个页面显示一个链接,该链接加载显示表单的新页面.提交表单时,重定向到访问此表单的原始页面的最简洁方法是什么?
始发页面 - >表单页面 - >始发页面
使用下一个变量似乎是unellegant,因为我必须在原始页面链接上将其设置为GET变量,然后在表单中将其设置为隐藏的POST变量?任何其他想法将不胜感激.
有几种选择,都有利弊和利益.
通过原始页面传递i POST
/GET
将原始页面存储在会话中(显然不适用于多个选项卡)
将原始页面存储在cookie中(也不适用于多个选项卡)
如果它是单个页面,则重定向到引荐来源.在你的情况下似乎不可能
我个人认为使用下一个参数是你最好的选择,但要记得保护它(只有相对网址,没有javascript的东西,csrf框架)所以你不会有任何安全问题.
WoLpH已经列出了合理的可能性,并指出(可能)最好的解决方案.所以我只会详细说明.
如果你需要处理这个:原始页面 - >表单页面 - >原始页面然后在现实中它将看起来像这样:原始页面 - [GET] - >表单页面 - [POST/submision] - >表单页面(2) - [GET /重定向] - >原始页面.这意味着,表单页面(2)阶段必须以某种方式知道重定向用户的位置,这里唯一合理的选择是使用会话(具有WoLpH提到的缺点)或者在POST中传递它,可能作为隐藏字段.
关于第一个GET并传递next URL
到表单页面,你可以在查询字符串中传递它(你发现它不优雅),或者你可以从HTTP_REFERER标题中提取它 - 这对像我这样的更偏执的用户不起作用.
你也可以在这里做一个混合的东西,即当且仅当用户没有在她的浏览器中关闭HTTP_REFERER 时才添加next=
到查询字符串中.然后大多数用户不会在URL中看到任何丑陋的东西.
请注意,所有这些都可以自动化,即您可以将链接编写为:
当inject_next_url
注入时:next={{ context['request'].get_full_path() }}
仅当HTTP_REFERER不存在时.
然后,在表单处理程序中,您可以使用一些泛型extract_next_url(request)
函数,它next URL
在以下其中一个中查找:查询字符串,HTTP_REFERER,request.POST或更多构造 - 在以下之一:HTTP_REFERER,request.REQUEST