¿Cómo realizo una redirección simple (por ejemplo, cflocation
en ColdFusion o header(location:http://)
para PHP) en Django?
158
Es sencillo:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Más información en los documentos oficiales de Django
Actualización: Django 1.0
Aparentemente hay una mejor manera de hacer esto en Django ahora usando generic views
.
Ejemplo
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Hay más en la documentación de vistas genéricas . Crédito: Carles Barrobés .
Actualización n. ° 2: Django 1.3+
En Django 1.5 redirect_to ya no existe y ha sido reemplazado por RedirectView . Crédito a Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
desdedjango.shortcuts
?('^pattern/$', lambda x: redirect('/redirect/url/'))
Dependiendo de lo que desee (es decir, si no desea realizar ningún preprocesamiento adicional), es más simple usar la
redirect_to
vista genérica de Django :Consulte la documentación para ver ejemplos más avanzados.
Para usar Django 1.3+:
fuente
En realidad, hay una manera más simple que tener una vista para cada redirección: puede hacerlo directamente en
urls.py
:Un objetivo puede ser una cadena invocable y una cadena , que es lo que estoy usando aquí.
fuente
redirect_to
vista genérica que viene con django es aún más simple y más legible. Ver la respuesta de Carles stackoverflow.com/questions/523356/python-django-page-redirect/…Desde Django 1.1, también puede usar el acceso directo de redireccionamiento más simple :
También toma un argumento opcional permanente = True palabra clave.
fuente
Si desea redirigir una subcarpeta completa, el
url
argumento en RedirectView está realmente interpolado , por lo que puede hacer algo como esto enurls.py
:El
?P<path>
que captures será alimentadoRedirectView
. Esta variable capturada será reemplazada en elurl
argumento que proporcionó, dándonos/new_path/yay/mypath
si su ruta original era/old/yay/mypath
.También puede hacerlo
….as_view(url='…', query_string=True)
si desea copiar la cadena de consulta también.fuente
Con Django versión 1.3, el enfoque basado en clases es:
Este ejemplo vive en urls.py
fuente
Tener cuidado. Lo hice en un servidor de desarrollo y quería cambiarlo más tarde.
Tuve que limpiar mis cachés para cambiarlo. Para evitar este rascarse la cabeza en el futuro, pude hacerlo temporal de esta manera:
fuente
Puede hacer esto en la sección Admin. Se explica en la documentación.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
fuente
page_path = define en urls.py
fuente
Esto debería funcionar en la mayoría de las versiones de django, lo estoy usando en 1.6.5:
Todavía puede usar el nombre del patrón de URL en lugar de una URL codificada con esta solución. El parámetro location_id de la url se pasa a la función lambda.
fuente