Comment effectuer une simple redirection (par exemple cflocation
dans ColdFusion ou header(location:http://)
pour PHP) dans Django?
158
C'est simple:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Plus d'informations dans la documentation officielle de Django
Mise à jour: Django 1.0
Il existe apparemment une meilleure façon de faire cela dans Django en utilisant maintenant generic views
.
Exemple -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Il y a plus dans la documentation des vues génériques . Crédit - Carles Barrobés .
Mise à jour n ° 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/')),
)
redirect
dedjango.shortcuts
?('^pattern/$', lambda x: redirect('/redirect/url/'))
En fonction de ce que vous voulez (c'est-à-dire si vous ne souhaitez pas faire de prétraitement supplémentaire), il est plus simple d'utiliser simplement la
redirect_to
vue générique de Django :Consultez la documentation pour des exemples plus avancés.
Pour Django 1.3+, utilisez:
la source
Il existe en fait un moyen plus simple que d'avoir une vue pour chaque redirection - vous pouvez le faire directement dans
urls.py
:Une cible peut être un appelable aussi bien qu'une chaîne , ce que j'utilise ici.
la source
redirect_to
vue générique fournie avec django est encore plus simple et plus lisible. Voir la réponse de Carles stackoverflow.com/questions/523356/python-django-page-redirect/...Depuis Django 1.1, vous pouvez également utiliser le raccourci de redirection plus simple :
Il prend également un argument de mot clé permanent = True facultatif.
la source
Si vous souhaitez rediriger un sous-dossier entier, l'
url
argument de RedirectView est en fait interpolé , vous pouvez donc faire quelque chose comme ça dansurls.py
:Le que
?P<path>
vous capturez sera alimentéRedirectView
. Cette variable capturée sera ensuite remplacée dans l'url
argument que vous avez donné, nous indiquant/new_path/yay/mypath
si votre chemin d'origine l'était/old/yay/mypath
.Vous pouvez également le faire
….as_view(url='…', query_string=True)
si vous souhaitez également copier la chaîne de requête.la source
Avec Django version 1.3, l'approche basée sur les classes est:
Cet exemple se trouve dans urls.py
la source
Il faut se méfier. J'ai fait cela sur un serveur de développement et je voulais le changer plus tard.
J'ai dû vider mes caches pour le changer. Afin d'éviter ce grattage à la tête à l'avenir, j'ai pu le rendre temporaire comme ceci:
la source
Vous pouvez le faire dans la section Admin. C'est expliqué dans la documentation.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
la source
page_path = définir dans urls.py
la source
Cela devrait fonctionner dans la plupart des versions de django, je l'utilise dans la version 1.6.5:
Vous pouvez toujours utiliser le nom du modèle d'URL au lieu d'une URL codée en dur avec cette solution. Le paramètre location_id de l'url est transmis à la fonction lambda.
la source