2009-07-30 4 views
18

Sto scrivendo un'applicazione web basata su membri e devo essere in grado di reindirizzare la pagina dopo il login. Voglio utilizzare l'url con nome dal mio script urls.py nel mio file views.py per l'applicazione di accesso, ma non riesco a capire come comportarmi. Quello che ho è questa:Django e urls.py: Come faccio HttpResponseRedirect tramite un url con nome?

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect('/path/to/page.html') 

Quello che voglio realizzare è qualcosa di simile:

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect url pageName 

ottengo errori di sintassi quando eseguo questo, tutte le idee?

risposta

34

È necessario utilizzare la funzione di utilità reverse().

from django.core.urlresolvers import reverse 

def myview(request): 
    return HttpResponseRedirect(reverse('arch-summary', args=[1945])) 

Dove args soddisfa tutti gli argomenti di espressioni regolari del vostro URL. È anche possibile fornire argomenti denominati passando un dizionario.

+0

Impressionante , grazie per l'aiuto! Devo aver appena cercato tutti i torti nei documenti del django. –

7

Un modo più conciso per scrivere che se l'istruzione fosse if request.session.get('user'). has_key è deprecato oggigiorno, e .get() restituisce None (per impostazione predefinita, modificabile passando un secondo parametro). Quindi, combinando questo con la risposta di Soviut:

from django.core.urlresolvers import reverse 

def login(request): 
    if request.session.get('user'): 
     return HttpResponseRedirect(reverse('my-named-url')) 
4

La risposta giusta da Django 1.3 onwards, in cui il metodo di reindirizzamento fa implicitamente una chiamata inversa, è:

from django.shortcuts import redirect 

def login(request): 
    if request.session.get('user'): 
     return redirect('named_url')