views:

599

answers:

3

In a form submission scenario, form is post to "/submit". I want to redirect user to "/sucess" on success and pass render some message to a template at new url. How to do this in Django? render_to_response doesn't do redirect and HttpResponseRedirect doesn't do template rendering.

+1  A: 

If your success page needs a dynamic message, you need to pass it there somehow. You can either do this via GET parameters in the URL you are redirecting to - eg return HttpResponseRedirect('/success/?msg=My+success+message+here') - or by setting some values in the session, which the success view can pick up.

Daniel Roseman
A: 

There is no good way to do what you want. The browser submits the form, which will take the user to /submit. Once you decide whether it's "successful", it's too late; the browser has already decided on it's destination. All you can do is redirect. But, as you're finding out, it's going to be hard to keep your POST state when you redirect.

I would give up on this. It's not how websites are supposed to work.

Chase Seibert
A: 

The response from Daniel Roseman is potentially dangerous, opening your site to XSS vulnerabilities.

Make sure you strip html tags from whatever message is passed if you must do it this way.

A better way would be to redirect to /success/?msg=ok, and have in your view a dictionary:

{ 'ok': 'Your success message' }
Roger