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/')),
답변
