python - with - redirect con parametros django
Django y urls.py: ¿Cómo respondo HttpResponseRedirect a través de una url con nombre? (4)
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 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 así como:
def login(request):
if request.session.has_key(''user''):
if request.session[''user''] is not None:
return HttpResponseRedirect url pageName
Obtengo errores de sintaxis cuando ejecuto esto, alguna idea?
Una forma más concisa de escribir que if statement 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 combina 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
La respuesta correcta de Django 1.3 en adelante , donde el método de redirección realiza una llamada inversa implícitamente, es:
from django.shortcuts import redirect
def login(request):
if request.session.get(''user''):
return redirect(''named_url'')
Necesitas usar la función reverse()
utils.
from django.core.urlresolvers 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 suministrar args con nombre pasando un diccionario.