2009-07-30 18 views
18

Estoy escribiendo una aplicación web basada en miembros, y necesito poder redirigir la página después de iniciar sesión. Quiero usar la url con nombre de mi script urls.py en mi archivo views.py para la aplicación de inicio de sesión, pero no puedo entender qué hacer. Lo que tengo es la siguiente:Django y urls.py: ¿Cómo puedo HttpResponseRedirect a través de una url con nombre?

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

lo que quiero lograr es algo así como:

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

recibo errores de sintaxis cuando yo haga esto, alguna idea?

Respuesta

34

Necesita utilizar la función reverse() utils.

from django.core.urlresolvers import reverse 

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

Dónde args satisface todos los argumentos en la expresión regular de su URL. También puede suministrar args con nombre pasando un diccionario.

+0

impresionante , ¡gracias por la ayuda! Debo haber estado buscando a través de los documentos de django todo mal. –

7

Una forma más concisa de escribir que si la declaración sería if request.session.get('user'). has_key está en desuso hoy en día, y .get() devuelve None (por defecto, se puede cambiar pasando un segundo parámetro). Así que la combinación de este con la respuesta de Soviut:

from django.core.urlresolvers import reverse 

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

La respuesta correcta a partir Django 1.3 onwards, donde el método de redirección hace implícitamente una llamada inversa, es decir:

from django.shortcuts import redirect 

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