[django] django의 urls.py에서 직접 명명 된 URL 패턴으로 리디렉션 하시겠습니까?

Django에서 urls.py에서 직접 간단한 리디렉션을 수행하려면 어떻게해야합니까? 당연히 나는 DRY 원칙을 선호하는 잘 조직 된 사람이므로 URL을 하드 코딩하는 대신 이름이 지정된 URL 패턴을 기반으로 대상을 얻고 싶습니다.



답변

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키워드 인수를 지정하지 않으면 다음 경고가 표시 될 수 있습니다.

Django 1.9에서 ‘RedirectView.permanent’의 기본값은 True에서 False로 변경됩니다. 이 경고를 끄려면 명시적인 값을 설정하십시오.


답변

이것은 나를 위해 작동합니다.

from django.views.generic import RedirectView

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

위의 예 '/'에서 URL 패턴을 추가 할 수있는 색인 페이지로 리디렉션됨을 의미합니다.


답변

장고 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's 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),
]


답변

RedirectView를 지원할 수없는 경우이 방법은 이전 버전의 django에서 지원됩니다.

view.py에서

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

url.py에서

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

사용하여 영구적으로 만들 수 있습니다 HttpResponsePermanentRedirect


답변

모든 404를 홈 페이지로 리디렉션하려고 시도했으며 다음이 훌륭했습니다.

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


답변