3

在表单提交场景中,表单发布到“/submit”。我想在成功时将用户重定向到“/success”,并将一些消息传递给新 url 的模板。如何在 Django 中做到这一点?render_to_response 不做重定向, HttpResponseRedirect 不做模板渲染。

4

6 回答 6

9

Daniel Roseman 的响应具有潜在危险,将您的站点打开到 XSS 漏洞。

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

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

{ 'ok': 'Your success message' }
于 2010-08-07T09:44:01.540 回答
3

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

于 2009-12-11T15:14:28.013 回答
1

做你想做的最好的方法是:在你的视图中将成功消息(或错误消息)设置为字典。并使用 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 %}

希望我有所帮助

于 2011-10-27T13:37:27.563 回答
0

没有什么好方法可以做你想做的事。浏览器提交表单,这会将用户带到 /submit。一旦你决定它是否“成功”,就为时已晚;浏览器已经决定了它的目的地。你所能做的就是重定向。但是,正如您所发现的,当您重定向时,很难保持您的 POST 状态。

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

于 2009-12-11T21:23:07.943 回答
0

如果您扩展通用视图,我认为 Django 已经这样做了。创建时有一个可选参数“post_save_redirect”。此功能用于自动生成的 Django 管理系统。例如,如果您想要一个新资源,比如用户,您可以访问 url“/user/add”。提交后,它会将您重定向到“/user/1”,并显示成功消息“您刚刚保存了用户 #1”。所以这是可能的,但我仍在研究如何在不扩展通用视图的情况下做到这一点。我对 Django 和 python 还是很陌生,所以通过 Django 核心来了解他们是如何做到的对我来说并不容易。

于 2010-11-17T23:09:16.070 回答
0

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

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

于 2015-05-15T11:51:25.963 回答