首页 文章

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

提问于
浏览
3

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

6 回答

  • 3

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

  • 9

    Daniel Roseman的回复可能是 dangerous ,将您的网站打开到XSS漏洞 .

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

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

    { 'ok': 'Your success message' }
    
  • 0

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

    希望我帮助过

  • 0

    没有好办法做你想做的事 . 浏览器提交表单,该表单将使用户进行/提交 . 一旦你决定它是否“成功”,那就太晚了;浏览器已经确定了它的目的地 . 你所能做的只是重定向 . 但是,正如您所发现的那样,重定向时很难保持POST状态 .

    我会放弃这个 . 这不是网站的运作方式 .

  • 0

    我认为如果扩展generic view,Django已经这样做了 . 在创建时,'s an optional argument 956485 . This functionality is used in the automatically generated Django admin system. For example if you want a new resource, say user, you go to the url 956486 . After you submit it redirects you to 956487 with a success message 956488 . So this is possible, but I'仍在研究如何在不扩展通用视图的情况下进行 . 我还是Django和python的新手,所以通过Django核心找到他们是如何做到的对我来说并不容易 .

  • 1

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

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

相关问题