Python + Django przekierowanie strony
Jak wykonać proste przekierowanie (np. cflocation
W ColdFusion lub header(location:http://)
w PHP) w Django?
10 answers
To proste:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Więcej informacji w official Django docs
Aktualizacja: Django 1.0
Jest najwyraźniej lepszy sposób na zrobienie tego w Django używając generic views
.
Przykład-
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Więcej jest w dokumentacji ogólnych widoków . Kredyt- Carles Barrobés .
Update #2: Django 1.3+
W Django 1.5 redirect_to już nie istnieje i został zastąpiony przez RedirectView . Kredyt na Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:09
W zależności od tego, czego chcesz (tj. jeśli nie chcesz wykonywać żadnego dodatkowego wstępnego przetwarzania), prostsze jest użycie widoku Generic redirect_to
Django:
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Zobacz dokumentacja dla bardziej zaawansowanych przykładów.
Dla Django 1.3 + użyj:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-08 15:22:15
Istnieje prostszy sposób niż posiadanie widoku dla każdego przekierowania - możesz to zrobić bezpośrednio w urls.py
:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
Cel może być zarówno wywoływalny, jak i łańcuch , którego tutaj używam.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-17 08:07:32
Od Django 1.1 możesz również użyć prostszego skrótu redirect:
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
Pobiera również opcjonalny argument permanent = True.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-05 11:09:03
Jeśli chcesz przekierować cały podfolder, argument url
w RedirectView jest interpolowany , więc możesz zrobić coś takiego w 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')),
]
The ?P<path>
you capture will be fed into RedirectView
. Ta przechwycona zmienna zostanie następnie zastąpiona w argumencie url
, który podałeś, dając nam /new_path/yay/mypath
jeśli oryginalną ścieżką była /old/yay/mypath
.
Możesz również wykonać ….as_view(url='…', query_string=True)
, jeśli chcesz skopiować łańcuch zapytania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 08:39:54
W wersji Django 1.3 podejście oparte na klasach jest następujące:
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'),
)
Ten przykład mieszka w urls.py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-14 12:55:33
Uważaj. Zrobiłem to na serwerze deweloperskim i chciałem to zmienić później.
Musiałem wyczyścić pamięć podręczną, żeby ją zmienić. Aby uniknąć tego drapania głowy w przyszłości, udało mi się uczynić go tymczasowym w ten sposób: {]}from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:09
Możesz to zrobić w sekcji Admin. Zostało to wyjaśnione w dokumentacji.
Https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-20 21:19:33
Page_path = define in urls.py
def deletePolls(request):
pollId = deletePool(request.GET['id'])
return HttpResponseRedirect("/page_path/")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-12 12:45:36
To powinno działać w większości wersji django, używam go w 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'),
....
)
Nadal możesz używać nazwy wzorca url zamiast mocno zakodowanego adresu url w tym rozwiązaniu. Parametr location_id z adresu url jest przekazywany do funkcji lambda.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-12 18:23:52