How do I pass template context information when using HttpResponseRedirect in Django?

前端 未结 7 1807
我在风中等你
我在风中等你 2020-12-05 04:26

I have a form that redirects to the same page after a user enters information (so that they can continue entering information). If the form submission is successful, I\'m r

相关标签:
7条回答
  • 2020-12-05 04:45

    if you are using auth and have a logged in user you could:

    http://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.models.User.message_set.create

    GET params are also hackable. The querystring, as mentioned in other answers, could be used.

    I think the most preferred way would be to use the sessions framework. That way you can load up whatever you want in the context and get

    {{ request.session.foo }} 
    

    foo could be the message or you could do:

    {% ifequal request.session.foo 1 %} Nice work! {% else %} Almost! {% endifequal %}
    

    and other fun stuff.

    http://docs.djangoproject.com/en/dev/topics/http/sessions/#using-sessions-in-views

    0 讨论(0)
  • 2020-12-05 04:49

    You add ?saved=1 to the query string and check for it with something like:

    saved = request.GET.get('saved', False)
    
    0 讨论(0)
  • 2020-12-05 04:52

    For the sake of completion and future reference, you can now use the messages framework. After you install it:

    views.py

    from django.contrib import messages
    
    def view(request):
      # your code
      messages.success(request, "Your data has been saved!")
      HttpResponseRedirect(request.path)
    

    template.html

    {% if messages %}
    <ul class="messages">
      {% for message in messages %}
      <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
      {% endfor %}
    </ul>
    {% endif %}
    
    0 讨论(0)
  • 2020-12-05 04:56

    You can't. HttpResponseRedirect sends a client-side redirect (HTTP status code 302) to the browser, and then the browser re-requests another page.

    You can set a URL query string on the redirect, though that will be visible to the user and anyone intercepting HTTP requests (i.e. proxies), and is therefore not suitable for sensitive information.

    0 讨论(0)
  • 2020-12-05 05:06

    The best way would probably be to use a coded querystring on the redirect URL... its an old school approach.

    You could do something like

    /page/?m=1, /page/?m=2, etc

    You would then parse that variable with request.GET in the view code and show the appropriate message.

    0 讨论(0)
  • 2020-12-05 05:06

    The only way I know of to pass any data with a redirect is to add GET parameters to the URL you're passing in. To avoid XSS hacks you'd want to pass a specific constant like:

    [current path you're passing in]?message=saved

    And then process the message=saved parameter in the handler for the path you passed in.

    A somewhat more complicated way would be not passing the data in the redirect, and instead using something like http://code.google.com/p/django-notify/ to store session-based data that is displayed to the user following the redirect.

    0 讨论(0)
提交回复
热议问题