158 votos

Python + redirección página Django

¿Cómo logran hacer una redirección simple (por ejemplo cflocation en ColdFusion), o header(location:http://) en django?

250voto

Baishampayan Ghose Puntos 9414

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/')),
)

113voto

Carles Barrobés Puntos 5283

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/')),
)

38voto

Teddy Puntos 3250

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í.

28voto

Kennu Puntos 546

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.

10voto

Zlatko Puntos 106

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X