Перенаправить на шаблон с указанным URL прямо из urls.py в django?

95

В Django, как я могу сделать простое перенаправление непосредственно из urls.py? Естественно, я хорошо организованный парень, выступающий за принцип DRY, поэтому я хотел бы, чтобы цель была основана на ней по типу url, а не на жестком кодировании url.

Теги:
redirect

4 ответа

154
Лучший ответ

Если вы используете Django 1.4 или 1.5, вы можете сделать это:

from django.core.urlresolvers import reverse_lazy
from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url=reverse_lazy('my_named_pattern'), permanent=False)),
    ...

Если вы находитесь на Django 1.6 или выше, вы можете сделать это:

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(pattern_name='my_named_pattern', permanent=False)),
    ...

В Django 1.9 значение по умолчанию permanent изменилось с True на False. Из-за этого, если вы не укажете аргумент ключевого слова permanent, вы можете увидеть это предупреждение:

RemovedInDjango19Warning: значение по умолчанию 'RedirectView.permanent' изменится с True на False в Django 1.9. Установите явное значение, чтобы отключить это предупреждение.

  • 18
    Просто обратите внимание, что RedirectView имеет постоянный = True по умолчанию.
Показать ещё 7 комментариев
21

Это работает для меня.

from django.views.generic import RedirectView

urlpatterns = patterns('',
    url(r'^some-page/$', RedirectView.as_view(url='/')),
    ...

В приведенном выше примере '/' означает, что он перенаправляется на страницу индекса, где вы можете добавить и другие шаблоны URL.

  • 5
    Просто обратите внимание, что RedirectView имеет permanent=True по умолчанию в старых версиях Django и permanent=False по умолчанию в версиях Django> = 1.9.
8

Этот способ поддерживается в более ранних версиях django, если вы не можете поддерживать RedirectView

В view.py

def url_redirect(request):
    return HttpResponseRedirect("/new_url/")

В url.py

url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),

Вы можете сделать это постоянным, используя HttpResponsePermanentRedirect

4

Я пытался перенаправить все 404s на домашнюю страницу, и следующее отлично работало:

from django.views.generic import RedirectView
...
under urlpatterns, added:
    url(r'^.*/$', RedirectView.as_view(url='/home/')),
    url(r'^$', RedirectView.as_view(url='/home/')),

Ещё вопросы

Сообщество Overcoder
Наверх
Меню