Django redirect with kwarg -



Django redirect with kwarg -

i new python , django , have question regarding redirect function.

this reduced version of views.py file.

def page_index(request, error_message=''): print error_message def add_page(request): homecoming redirect('page_index') # work fine homecoming redirect('page_index', error_message='test') # not work

and here short version of urls.py

urlpatterns = patterns( 'x.views', url(r'^$', 'page_index', {'error_message': 't'}, name='page_index'), url(r'^add/$', 'add_page', name='add_page'), )

when seek redirecting page_index without keyword argument works fine, when utilize kwag next error message:

noreversematch @ /pages/add/

reverse 'page_index' arguments '()' , keyword arguments '{'error_message': 'test'}' not found.

what doing wrong?

short answer: there no place in url scheme 'error_message' keyword.

longer answer:

the redirect() function calling reverse() build url; going send user's browser url returning http response 302 redirect status code, , new url. keyword arguments supply reverse() supposed end part of url -- that's how communicated user.

in case, though, url 'page_index` defined '^$' -- root url, looks 'http://yoursite.com/' in browser.

if want able issue redirect contains other information, need define place in url, or add together in different way.

twothree ways mutual this:

use query parameter -- sends message client explicitly; if aren't careful, people can craft urls create index page whatever want to.

return redirect(reverse('page-index')+"?error_message=test"))

stash message in session , pull out when next page loads -- requires have sessions configured, , keeps track of on server side, rather relying on client send error message:

def add_page(request): request.session['error_message'] = 'test' homecoming redirect('page-index') def page_index(request): print request.session.get('error_message','')

use messages framework -- preferred on ad-hoc session attributes, long don't need many 'types' of message on same page. if have space in template error message, though, easy:

from django.contrib.messages import error def add_page(request): error(request, 'test') homecoming redirect('page-index')

and in base of operations template, have block somewhere (probably more complex this; styled, even):

{% message in messages %} <p>{{ message }}</p> {% endfor %}

in bothall cases, though, can remove arguments urls.py -- message not going part of path component of url.

urlpatterns = patterns( 'x.views', url(r'^$', 'page_index', name='page_index'), url(r'^add/$', 'add_page', name='add_page'), )

django redirect

Comments

Popular posts from this blog

How do I check if an insert was successful with MySQLdb in Python? -

delphi - blogger via idHTTP : error 400 bad request -

postgresql - ERROR: operator is not unique: unknown + unknown -