В Django, как я могу сделать простое перенаправление непосредственно из urls.py? Естественно, я хорошо организованный парень, выступающий за принцип DRY, поэтому я хотел бы, чтобы цель была основана на ней по типу url, а не на жестком кодировании url.
Перенаправить на именованный шаблон url непосредственно из urls.py в django?
Ответ 1
Если вы используете 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. Установите явное значение, чтобы отключить это предупреждение.
Ответ 2
Это работает для меня.
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-page/$', RedirectView.as_view(url='/')),
...
В приведенном выше примере '/'
означает, что он перенаправляется на страницу индекса,
где вы можете добавить и другие шаблоны URL.
Ответ 3
Этот способ поддерживается в более ранних версиях 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
для джанго v2+
from django.contrib import admin
from django.shortcuts import redirect
from django.urls import path, include
urlpatterns = [
# this example uses named URL 'hola-home' from app named hola
# for more redirect usage options: https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/
path('', lambda request: redirect('hola/', permanent=False)),
path('hola/', include("hola.urls")),
path('admin/', admin.site.urls),
]
Ответ 5
Я пытался перенаправить все 404s на домашнюю страницу, и следующее отлично работало:
from django.views.generic import RedirectView
...
under urlpatterns, added:
url(r'^.*/$', RedirectView.as_view(url='/home/')),
url(r'^$', RedirectView.as_view(url='/home/')),