¿Cómo logran hacer una redirección simple (por ejemplo cflocation en ColdFusion), o header(location:http://) en django?
Respuestas
¿Demasiados anuncios?Es muy sencillo:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Más info en el oficial de Django docs
Actualización: Django 1.0
Al parecer, hay una mejor manera de hacer esto en Django ahora, utilizando generic views
.
Ejemplo -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Hay más en el genérico de vistas de la documentación. De Crédito - Carles Barrobés.
Actualización #2: Django 1.3+
En Django 1.5 *redirect_to* ya no existe y ha sido sustituido por RedirectView. Crédito a Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
Dependiendo de lo que quieres (es decir, si no quieres hacer cualquier preprocesamiento adicional), es más sencillo usar visión genérica de Django redirect_to:
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Consulte la documentación para obtener ejemplos más avanzados.
Para el uso de Django 1.3 +:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
Hay en realidad una forma más fácil que tener una vista para cada redirección - puedes hacerlo directamente urls.py
:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
Un objetivo puede ser un exigible, así como una cadena, que es lo que estoy usando aquí.
Desde Django 1.1, también puede utilizar el atajo de redirigir la más simple:
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
También es necesario tener una permanente opcional = argumento clave verdadera.
Con Django versión 1.3, el enfoque de la clase base es:
from django.conf.urls.defaults import patterns, url
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-url/$', RedirectView.as_view(url='/redirect-url/'), name='some_redirect'),
)
En este ejemplo vive en urls.py