Перенаправление страницы Python + Django

Как выполнить простой переадресацию (например, cflocation в ColdFusion или header(location:http://) для PHP) в Django?

10 Solutions collect form web for “Перенаправление страницы Python + Django”

Это просто:

 from django.http import HttpResponseRedirect def myview(request): ... return HttpResponseRedirect("/path/") 

Дополнительная информация в официальных документах Django

Обновление: Django 1.0

По-видимому, лучший способ сделать это в Django теперь использует generic views .

Пример –

 from django.views.generic.simple import redirect_to urlpatterns = patterns('', (r'^one/$', redirect_to, {'url': '/another/'}), #etc... ) 

В общей документации есть больше. Кредит – Карлес Барробес .

Обновление # 2: Django 1.3+

В Django 1.5 redirect_to больше не существует и был заменен RedirectView . Кредит Йонатану

 from django.views.generic import RedirectView urlpatterns = patterns('', (r'^one/$', RedirectView.as_view(url='/another/')), ) 

В зависимости от того, что вы хотите (т. Е. Если вы не хотите делать дополнительную предварительную обработку), проще просто использовать Django redirect_to generic view:

 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')), ) 

Цель может быть вызываемой, а также строкой , которую я использую здесь.

Начиная с 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 нам /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

Осторожно. Я сделал это на сервере разработки и хотел изменить его позже.

  • Перенаправление 301 кэширования Firefox 5

Мне пришлось очистить свои кеши, чтобы изменить его. Чтобы избежать этой царапины в будущем, я смог сделать это так:

 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/

page_path = define в urls.py

 def deletePolls(request): pollId = deletePool(request.GET['id']) return HttpResponseRedirect("/page_path/") 

Это должно работать в большинстве версий 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 передается до функции лямбда.

  • Индексирование и поиск связанных объектов со стогом сена
  • python-social-auth и github, у меня есть эта ошибка «Redirect_uri ДОЛЖЕН соответствовать зарегистрированному URL-адресу обратного вызова для этого приложения»
  • Ошибка при загрузке модуля MySQLdb с помощью Django в OS X
  • Очень простой пользовательский ввод в django
  • Пользовательский парсер django rest parser
  • Django-allauth загружает неправильный шаблон base.html
  • Ошибка UnicodeError при вызове команды Django i18n makemessages
  • Django 1.5 + Отношение пользовательской модели
  • Python - лучший язык программирования в мире.