2014-11-18 8 views
5

Sto usando Django 1.7 con Python 3.4. Ho uno scenario in cui desidero che gli utenti vengano reindirizzati a un'altra vista, come definito nel parametro GET next, dopo aver effettuato l'accesso. Ma con la mia attuale configurazione, vengono sempre reindirizzati alla home page. Speravo che ci fosse un modo per farlo nella get_success_url della classe FormView.Reindirizza all'URL successivo in django FormView

Qui di seguito è il mio codice

Il prossimo parametro nell'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 

Con l'impostazione di cui sopra, come faccio a reindirizzare all'URL successivo se è definito, a parte la home page?

+0

possibile duplicato di [URL successo Django usando kwargs] (http://stackoverflow.com/questions/26897050/django-success-url-using-kwargs) – rnevius

+0

Ho visto il collegamento menzionato sopra, e mentre si occupa del reindirizzamento a un altro oggetto/vista, non mostra come ottenere i parametri 'GET' nel metodo' get_success_url' inorder per passare l'URL 'next'. – Frankline

risposta

7

Includi i dati come parametri GET nel tuo URL di successo.

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 

Spero che questo funzioni per voi.

+0

Questo non ha funzionato per me. Non sono sicuro di cosa manca il mio codice. – Frankline

+2

hai visto che hai ottenuto il prossimo in self.request.POST. Dato che sta funzionando per me. dovresti controllare che il tuo prossimo parametro arrivi POST o GET. –

+0

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

Problemi correlati