渲染以响应Django中的重定向URL

时间:2009-12-11 14:47:56

标签: django redirect httpresponse

在表单提交方案中,表单将发布到“/ submit”。我想在成功时将用户重定向到“/ sucess”,并将一些消息传递给新网址的模板。如何在Django中执行此操作? render_to_response不进行重定向,HttpResponseRedirect不进行模板渲染。

6 个答案:

答案 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消息框架,用于一次性通知消息。

https://docs.djangoproject.com/en/1.8/ref/contrib/messages/