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
Post a Comment