159 votes

Python + redirection de la page Django

Comment puis-je effectuer une simple redirection (par exemple, cflocation dans ColdFusion ou en-tête (emplacement: http: //) dans django)?

252voto

Baishampayan Ghose Points 9414

C'est simple:

from django.http import HttpResponseRedirect

def myview(request):
    ...
    return HttpResponseRedirect("/path/")

Plus d'infos dans l' officiel de Django docs

Mise À Jour: Django 1.0

Apparemment, il y a une meilleure manière de faire ceci dans Django maintenant à l'aide d' generic views.

Exemple -

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',   
    (r'^one/$', redirect_to, {'url': '/another/'}),

    #etc...
)

Il n'est plus dans le générique de vue de la documentation. Crédit - Carles Barrobés.

Mise À Jour #2: Django 1.3+

Dans Django 1.5 *redirect_to* n'existe plus et a été remplacé par RedirectView. Crédit à Yonatan

from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^one/$', RedirectView.as_view(url='/another/')),
)

114voto

Carles Barrobés Points 5283

Selon ce que vous voulez (c'est-à-dire si vous ne souhaitez pas effectuer de pré-traitement supplémentaire), il est plus simple d'utiliser simplement la vue redirect_to de Django:

 from django.views.generic.simple import redirect_to

urlpatterns = patterns('',
    (r'^one/$', redirect_to, {'url': '/another/'}),

    #etc...
)
 

Consultez la documentation pour des exemples plus avancés.


Pour Django 1.3+, utilisez:

 from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^one/$', RedirectView.as_view(url='/another/')),
)
 

38voto

Teddy Points 3250

Il y a en fait un moyen plus simple que d'avoir une vue pour chaque redirection - vous pouvez le faire directement en urls.py :

 from django.http import HttpResponsePermanentRedirect

urlpatterns = patterns(
    '',
    # ...normal patterns here...
    (r'^bad-old-link\.php',
     lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
 

Une cible peut être un appelant ou une chaîne , ce que j'utilise ici.

28voto

Kennu Points 546

Depuis Django 1.1, vous pouvez également utiliser le raccourci de redirection plus simple:

 from django.shortcuts import redirect

def myview(request):
    return redirect('/path')
 

Il prend également un argument optionnel permanent = True mot-clé.

10voto

Zlatko Points 106

Avec Django version 1.3, l’approche basée sur les classes est la suivante:

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

Cet exemple vit dans urls.py

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X