Comment puis-je effectuer une simple redirection (par exemple, cflocation dans ColdFusion ou en-tête (emplacement: http: //) dans django)?
Réponses
Trop de publicités?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/')),
)
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/')),
)
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.
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é.
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