Redirect to previous page after registration in Django -
for login , logout, use django's built-in view in django.contrib.auth.views. easy redirect user previous page because can pass 'next' parameter login/logout view. work quit fine.
when want fulfill similar functionality registration, there problems. seems django doesn't have built-in registration view. i'm using createview 'model=user'. codes following:
#views.py class registration(createview): template_name='accounts/registration.html' model=user #overwrite form_valid() log new user in after successful registartion def form_valid(self, form): validation=super(registration, self).form_valid(form) username=form.cleaned_data['username'] password=form.cleaned_data['password2'] user=authenticate(username=username, password=password) login(self.request, user) return validation
now don't have similar 'next' parameter in built-in login/logout view. how can redirect new user previous page after registration?
i tried following method:
step1: template trigger registration view, pass 'next' parameter via method.
<a href="{% url 'accounts:registration' %}?next={{request.path}}">registration</a>
by way, url related registration is:
#accounts/urls.py urlpatterns = patterns('', # others url(r'^registration/$', views.registration.as_view(), name='registration'), )
step2: overwrite get_context_data() , get_success_url() methods, trying construct own 'next' parameter:
#views.py class registration(createview): # other codes above def get_context_data(self, **kwargs): context=super(registration, self).get_context_data(**kwargs) context[next]=self.request.get['next'] return context def get_success_url(self): redirect_to=self.request.post['next'] return redirect_to
step3: in template, add 'hidden' input field hold next value:
# accounts/registration.html <form method="post" action="{% url 'accounts:registration' %}" > {% csrf_token %} <p> {{form.as_p}} </p> <input type="submit" value="regsitarte" /> <input type="hidden" name="next" value={{next}} /> </form>
this method works fine when user doesn't make mistake during registration procedure. if, example, user posts username existing, or format of email address invalid, method report error "next" parameter.
can give method redirect user after registration? or can alter codes fulfill functionality? i'd use django's built-in class-based generic views, instead of write new view scratch.
if leave html forms action
attribute blank defaults url of current page, get
query parameters , all.
if change form remove hidden field , remove action should work fine:
<form method="post"> <p> {{form.as_p}} </p> <input type="submit" value="regsitarte" /> </form>
Comments
Post a Comment