Come faccio a eseguire un semplice reindirizzamento (ad esempio cflocation
in ColdFusion o header(location:http://)
per PHP) in Django?Python + Django page redirect
risposta
E 'semplice:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Maggiori informazioni nella aggiornamento official Django docs
: Django 1.0
C'è evidentemente un modo migliore di fare questo in Django ora utilizzando generic views
.
Esempio -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
C'è di più nel generic views documentation. Credito - Carles Barrobés.
Aggiornamento # 2: Django 1.3+
In Django 1.5 redirect_to non esiste più ed è stato sostituito da RedirectView. Credito al Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
In realtà c'è un modo più semplice che avere una visione per ogni redirect - è possibile farlo direttamente in urls.py
:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
A target can be a callable as well as a string, che è quello che sto usando qui .
Vero, ma l'uso della vista generica' redirect_to' fornita con django è più semplice e più leggibile. Vedi Carles answer http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Day
Dal Django 1.1, è possibile utilizzare anche il più semplice redirect scorciatoia:
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
Ci vuole anche un argomento parola chiave permanente = True opzionale.
A seconda di ciò che si vuole (vale a dire se non si vuole fare qualsiasi ulteriore pre-processing), è più semplice utilizzare solo redirect_to
vista generico di Django:
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Vedere documentation per gli esempi più avanzati.
per Django 1.3+ uso:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
+1 per usare una vista generica piuttosto che implementare la tua (non importa quanto semplice) come nella (attuale) la risposta più votata. – Day
Qualcuno ha qualche esempio per se * si * desidera eseguire un'ulteriore pre-elaborazione? – niallsco
Quindi suggerirei di scrivere una vista personalizzata che elabora e quindi chiama la vista generica o scrivi un decoratore, ad es. pre_processo e decorare la vista generica: (r '^ one/$', pre_process (redirect_to), {'url': '/ another /'}) –
Con Django versione 1.3, l'approccio basato classe è:
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'),
)
Questo esempio vive in in urls.py
Puoi farlo nella sezione Amministrazione. È spiegato nella documentazione.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
Anche se non abbastanza pertinente alla mia domanda, questa è ancora un'interessante informazione. –
Attenzione. L'ho fatto su un server di sviluppo e volevo cambiarlo in seguito.
ho dovuto cancellare la mia cache di cambiarlo. Al fine di evitare questo testa-graffiare in futuro, sono stato in grado di farlo temporanea in questo modo:
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
ok per 1.5 Django –
page_path = definire in urls.py
def deletePolls(request):
pollId = deletePool(request.GET['id'])
return HttpResponseRedirect("/page_path/")
'deletePool'? Quella risposta sembra una copia-n-incolla fuori posto ... –
Se si desidera reindirizzare un intero sottocartella, l'argomento url
in RedirectView is actually interpolated, in modo da poter fare qualcosa di simile in urls.py
:
from django.conf.urls.defaults import url
from django.views.generic import RedirectView
urlpatterns = [
url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')),
]
Il numero ?P<path>
acquisito verrà inserito in RedirectView
. Questa variabile acquisita verrà quindi sostituita nell'argomento url
, dandoci /new_path/yay/mypath
se il percorso originale era /old/yay/mypath
.
È anche possibile eseguire ….as_view(url='…', query_string=True)
se si desidera copiare anche la stringa di query.
Questo dovrebbe funzionare nella maggior parte delle versioni di Django, Io lo utilizzo in 1.6.5:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
....
url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
....
)
è ancora possibile utilizzare il nome del modello URL invece di un URL hard coded con questa soluzione. Il parametro location_id dall'URL viene passato alla funzione lambda.
- 1. Django ritorno redirect() con parametri
- 2. Django - Home Page Sito Web
- 3. Python Reportlab Page Break
- 4. Page Rank in Python
- 5. Django redirect() con parametri di ancoraggio (#)
- 6. Clean URL Redirect Loop
- 7. Python elasticsearch-dsl django impaginazione
- 8. Aggiungi azioni personalizzate alla home page dell'amministratore di Django?
- 9. Redirect mobile
- 10. Redirect management.call_command() stdout in un file
- 11. crittografia django, python e link
- 12. wikipedia page-to-page link da parte pageid
- 13. Console redirect con Console.CursorLeft
- 14. Redirect con metodo post
- 15. Zend Multinazionali redirect
- 16. ASP.NET e C# Redirect
- 17. Android Webview Redirect loop
- 18. MVC redirect per instradare
- 19. Redirect Dopo Login: Web.config
- 20. URL Redirect Javascript
- 21. Redirect System.out.println per accedere
- 22. Redirect o in avanti
- 23. PHP Redirect Pausa
- 24. C++ Redirect Output
- 25. Come risolvere Redirect Loop
- 26. Symfony 2 redirect percorso
- 27. Http Redirect 302
- 28. Python + Django su Android
- 29. Multithreading per Python Django
- 30. Python Django Global Variables
Questo non è più il metodo migliore di Django 1.0. Vedi questa risposta: http://stackoverflow.com/questions/523356/python-django-page-redirect/3841632#3841632 – Jake
Perché non utilizzare 'redirect' da' django.shortcuts'? –
Io uso '('^ modello/$', lambda x: redirect ('/ redirect/url /'))' – mrmagooey