呈现以响应Django中重定向的url

呈现以响应Django中重定向的url,django,redirect,httpresponse,Django,Redirect,Httpresponse,在表单提交场景中,表单是post to“/submit”。我想在成功时将用户重定向到“/suces”,并将一些消息传递给新url处的模板。在Django如何做到这一点?render_to_响应不执行重定向,HttpResponseRedirect不执行模板呈现。如果成功页面需要动态消息,则需要以某种方式将其传递到该页面。您可以通过在重定向到的URL中获取参数来执行此操作-例如返回HttpResponseRedirect(“/success/?msg=My+success+message+here

在表单提交场景中,表单是post to“/submit”。我想在成功时将用户重定向到“/suces”,并将一些消息传递给新url处的模板。在Django如何做到这一点?render_to_响应不执行重定向,HttpResponseRedirect不执行模板呈现。

如果成功页面需要动态消息,则需要以某种方式将其传递到该页面。您可以通过在重定向到的URL中获取参数来执行此操作-例如返回HttpResponseRedirect(“/success/?msg=My+success+message+here”)-或者通过在会话中设置一些值来执行此操作,成功视图可以选择这些值。

没有好的方法来完成您想要的操作。浏览器提交表单,该表单将引导用户提交。一旦你决定它是否“成功”,就太晚了;浏览器已经决定了它的目的地。你所能做的就是重定向。但是,正如您所发现的,当您重定向时,很难保持POST状态


我会放弃的。这不是网站应该如何工作。

Daniel Roseman的回应可能是危险的,会让你的网站暴露XSS漏洞

如果必须这样做,请确保从传递的任何消息中删除html标记

更好的方法是重定向到/success/?msg=ok,并在您的视图中查看字典:

{ 'ok': 'Your success message' }

我想如果你扩展这个程序,Django已经做到了。在create上有一个可选参数“post\u save\u redirect”。此功能用于自动生成的Django管理系统。例如,如果您想要一个新的资源,比如user,您可以转到url“/user/add”。提交后,它会将您重定向到“/user/1”,并显示一条成功消息“you just saved user#1”。所以这是可能的,但我仍在研究如何在不扩展通用视图的情况下做到这一点。我对Django和python仍然很陌生,因此查看Django core以了解它们是如何实现的对我来说并不容易。

实现您想要的最好方法是: 在视图中,将成功消息(或错误消息)设置为dict,并使用render_to_响应显示任何模板

在模板中,您可以验证是否存在消息以及消息是错误消息还是成功消息

有些人喜欢这样: 在你看来:

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 %}

希望我已经提供了帮助

我建议使用Django消息框架,它用于一次性通知消息


我假设HttpResponseRedirect只是告诉客户端重定向?它重定向的页面不负责渲染吗?另外,如果有人手动转到您的/success页面怎么办?