在表单提交方案中,表单将发布到“/ submit”。我想在成功时将用户重定向到“/ sucess”,并将一些消息传递给新网址的模板。如何在Django中执行此操作? render_to_response不进行重定向,HttpResponseRedirect不进行模板渲染。
答案 0 :(得分:9)
Daniel Roseman的回复可能危险,让您的网站开启XSS漏洞。
如果必须以这种方式执行,请确保从传递的任何邮件中删除html标记。
更好的方法是重定向到/ success /?msg = ok,并在您的视图中输入字典:
{ 'ok': 'Your success message' }
答案 1 :(得分:3)
如果您的成功页面需要动态消息,则需要以某种方式将其传递给那里。您可以通过您要重定向到的URL中的GET参数(例如return HttpResponseRedirect('/success/?msg=My+success+message+here')
)或通过在会话中设置一些成功视图可以获取的值来执行此操作。
答案 2 :(得分:1)
做你想做的最好的方法是: 在您的视图中将成功消息(或错误消息)设置为dict。并使用render_to_response显示任何模板。
在模板中,您可以验证是否有消息,以及消息是错误消息还是成功消息。
有些人喜欢这样: 在您看来:
if anyError:
dict = {"message" : {"error" : "The error message"}}
else:
dict = {"message" : {"success" :"The success message"}}
在你的模板中:
{% if message %}
{% if message.error %}
{{ message.error }}
{% else %}
{{ message.success }}
{% endif %}
{% endif %}
希望我帮助
答案 3 :(得分:0)
没有好办法做你想做的事。浏览器提交表单,该表单将使用户进行/提交。一旦你决定它是否“成功”,那就太晚了;浏览器已经确定了它的目的地。你所能做的只是重定向。但是,正如您所发现的那样,重定向时很难保持POST状态。
我会放弃这个。这不是网站的运作方式。
答案 4 :(得分:0)
我认为如果扩展generic view,Django已经这样做了。在创建时,有一个可选参数“post_save_redirect”。此功能用于自动生成的Django管理系统。例如,如果您想要一个新资源,比如用户,则转到网址“/ user / add”。提交后,它会将您重定向到“/ user / 1”,并显示成功消息“您刚刚保存了用户#1”。所以这是可能的,但我仍然在研究如何在不扩展通用视图的情况下完成它。我还是Django和python的新手,所以通过Django核心找到他们是怎么做的对我来说并不容易。
答案 5 :(得分:0)
我建议使用Django消息框架,用于一次性通知消息。