Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redirect to next URL in django FormView

I am using Django 1.7 with Python 3.4. I have a scenario where I wish the users to be redirected to another view, as defined in the next GET parameter, after they login. But with my current setup, they always get redirected to the home page. I was hoping there is a way to do this in the get_success_url of the FormView class.

Below is my code

The next parameter in the URL

http://localhost:8000/login/?next=/ads/new

views.py

from django.views.generic.edit import FormView 

class LoginView(FormView):

    template_name = 'users/login.html'
    form_class = LoginForm

    def get_success_url(self):                           
        return reverse('home')

    def form_valid(self, form):
        form.user.backend = 'django.contrib.auth.backends.ModelBackend'
        login(self.request, form.user)
        messages.info(self.request, 'Login successful')
        return super(LoginView, self).form_valid(form)

urls.py

url(r'^login/', LoginView.as_view(), name='login'),
url(r'^new$', 'apps.adverts.views.add_new_advert', name='new_advert'), # URL to use after login, in next param

With the above setup, how do I redirect to the next URL if it is defined, apart from the home page?

like image 493
Frankline Avatar asked Nov 18 '14 07:11

Frankline


1 Answers

Include the data as GET parameters in your success url.

def get_success_url(self):
   # find your next url here
   next_url = self.request.POST.get('next',None) # here method should be GET or POST.
   if next_url:
       return "%s" % (next_url) # you can include some query strings as well
   else :
       return reverse('home') # what url you wish to return

Hope this will work for you.

like image 71
Yogesh dwivedi Geitpl Avatar answered Sep 21 '22 15:09

Yogesh dwivedi Geitpl