2014-11-18 9 views
5

Ich verwende mit Python 3.4. Ich habe ein Szenario, in dem ich möchte, dass die Benutzer nach der Anmeldung in eine andere Ansicht umgeleitet werden, wie im Parameter next GET definiert. Aber mit meinem derzeitigen Setup werden sie immer auf die Homepage weitergeleitet. Ich hatte gehofft, es gibt einen Weg, dies in der get_success_url der FormView Klasse zu tun.Umleiten auf die nächste URL in Django FormView

Unten ist mein Code

Der nächste Parameter in der 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 

Wie kann ich mit der oben genannten Einrichtung zur nächsten URL umleiten, wenn sie definiert ist, abgesehen von der Homepage?

+0

möglich Duplikat von [Django Erfolg URL mit Kwargs] (http://stackoverflow.com/questions/26897050/django-success-url-using-kwargs) – rnevius

+0

Ich habe den oben genannten Link und während es angesehen befasst sich mit der Weiterleitung zu einem anderen Objekt/View, es zeigt nicht, wie die 'GET' Parameter in der' get_success_url' Methode abgerufen werden, um die 'next' URL zu übergeben. – Frankline

Antwort

7

Fügen Sie die Daten als GET-Parameter in Ihre Erfolgs-URL ein.

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 

Hoffe, das wird für Sie arbeiten.

+0

Das hat nicht für mich funktioniert. Nicht sicher, was mein Code fehlt. – Frankline

+2

haben Sie gesehen, dass Sie als nächstes in self.request.POST kommen. Wie das bei mir funktioniert. Sie sollten überprüfen, ob Ihr nächster Parameter auf POST oder GET kommt. –

+0

Versuchen Sie self.request.GET ('next', None). – tzipp

Verwandte Themen