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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -