Відповіді:
Це просто:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Більше інформації в офіційних документах Django
Оновлення: Django 1.0
Мабуть, кращий спосіб зробити це в Джанго зараз, використовуючи generic views
.
Приклад -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Більше в документації на загальні погляди . Кредит - Carles Barrobés .
Оновлення №2: Джанго 1.3+
У Django 1.5 redirect_to більше не існує і його замінив RedirectView . Кредит Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
з django.shortcuts
?
('^pattern/$', lambda x: redirect('/redirect/url/'))
Залежно від того, що ви хочете (тобто якщо ви не хочете робити додаткову попередню обробку), простіше просто використовувати redirect_to
загальний вигляд Django :
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Докладніші приклади див. У документації .
Для Django 1.3+ використовуйте:
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
Насправді є простіший спосіб, ніж перегляд кожного перенаправлення - це можна зробити безпосередньо в urls.py
:
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
Ціль може бути як дзвінка, так і рядка , що я тут використовую.
redirect_to
загальний вигляд, який поставляється з джанго, все ще простіше і читабельніше. Дивіться відповідь Карлеса stackoverflow.com/questions/523356/python-django-page-redirect/…
Оскільки Django 1.1, ви також можете використовувати більш простий ярлик для переадресації :
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
Він також бере необов'язковий постійний = аргумент ключового слова True.
Якщо ви хочете перенаправити цілу підпапку, url
аргумент в RedirectView насправді інтерполюється , тому ви можете зробити щось подібне у 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')),
]
?P<path>
Ви захоплення буде подаватися в RedirectView
. Потім ця зафіксована змінна буде замінена в url
наведеному вами аргументі, даючи нам, /new_path/yay/mypath
якщо був ваш вихідний шлях/old/yay/mypath
.
Ви також можете зробити це, ….as_view(url='…', query_string=True)
якщо ви хочете скопіювати рядок запиту.
У Django версії 1.3 підхід на основі класу:
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'),
)
Цей приклад міститься в urls.py
Остерігайся. Я робив це на сервері розробки і хотів його змінити пізніше.
Мені довелося очистити кеші, щоб змінити це. Щоб уникнути цього чухання в голові, я зміг зробити його тимчасовим так:
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
Це можна зробити в розділі Адміністратор. Це пояснено в документації.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
Це має працювати в більшості версій django, я використовую його в 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'),
....
)
Ви все ще можете використовувати назву шаблону URL замість жорсткого кодованого URL за допомогою цього рішення. Параметр location_id з URL-адреси передається до функції лямбда.