Django y urls.py: ¿Cómo hago HttpResponseRedirect a través de una url nombrada?

Estoy escribiendo una aplicación web para miembros y necesito poder redirigir la página después de iniciar sesión. Quiero usar la url nombrada de mi script urls.py en mi archivo views.py para la aplicación de inicio de sesión, pero no puedo, por mi vida, averiguar qué hacer. Lo que tengo es esto:

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 como:

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

Recibo errores de syntax cuando ejecuto esto, ¿alguna idea?

Necesitas usar la función reverse() utils.

 from django.core.urlresolvers import reverse # or from django.urls import reverse def myview(request): return HttpResponseRedirect(reverse('arch-summary', args=[1945])) 

Donde args satisface todos los argumentos en la expresión regular de tu url. También puede proporcionar argumentos con nombre pasando un diccionario.

La respuesta correcta de Django 1.3 en adelante , donde el método de redireccionamiento hace una llamada inversa implícitamente, es:

 from django.shortcuts import redirect def login(request): if request.session.get('user'): return redirect('named_url') 

Una forma más concisa de escribir esa statement if sería if request.session.get('user') . has_key está en desuso hoy en día, y .get () devuelve Ninguno (de forma predeterminada, se puede cambiar al pasar un segundo parámetro). Así que combinando esto 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')) 
 from django.core.urlresolvers import reverse from django.shortcuts import redirect def login(request): if request.session.get('user'): return redirect(reverse('name-of-url')) 

También vea https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls