장고 URL 리디렉션
다른 URL과 일치하지 않는 트래픽을 홈 페이지로 리디렉션하려면 어떻게 해야 합니까?
urls.py :
urlpatterns = patterns('',
url(r'^$', 'macmonster.views.home'),
#url(r'^macmon_home$', 'macmonster.views.home'),
url(r'^macmon_output/$', 'macmonster.views.output'),
url(r'^macmon_about/$', 'macmonster.views.about'),
url(r'^.*$', 'macmonster.views.home'),
)
현재 상태로는 마지막 항목이 모든 "기타" 트래픽을 홈 페이지로 보내지만 HTTP 301 또는 302를 통해 리디렉션하려고 합니다.
클래스 기반 보기를 사용할 수 있습니다.
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
url(r'^$', 'macmonster.views.home'),
#url(r'^macmon_home$', 'macmonster.views.home'),
url(r'^macmon_output/$', 'macmonster.views.output'),
url(r'^macmon_about/$', 'macmonster.views.about'),
url(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
)
방법에 주목url
에서<url_to_home_view>
실제로 URL을 지정해야 합니다.
permanent=False
HTTP 302를 반환하는 동안permanent=True
HTTP 301을 반환합니다.
또는 사용할 수 있습니다.
장고 2+ 버전에 대한 업데이트
장고 2+로.url()
사용되지 않고 다음으로 대체되었습니다.re_path()
사용법은 다음과 정확히 동일합니다.url()
규칙적인 표정으로정규식이 필요 없는 대체의 경우,path()
.
from django.urls import re_path
re_path(r'^.*$', RedirectView.as_view(url='<url_to_home_view>', permanent=False), name='index')
장고 1.8에서는 이렇게 했습니다.
from django.views.generic.base import RedirectView
url(r'^$', views.comingSoon, name='homepage'),
# whatever urls you might have in here
# make sure the 'catch-all' url is placed last
url(r'^.*$', RedirectView.as_view(pattern_name='homepage', permanent=False))
사용하는 대신url
사용할 수 있습니다.pattern_name
이것은 약간 드라이하지 않고 URL을 변경할 수 있으므로 리디렉션도 변경할 필요가 없습니다.
다른 방법은 잘 작동하지만 오래된 것을 사용할 수도 있습니다.django.shortcut.redirect
.
장고 2.x에서:
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=True)),
path('hola/', include('hola.urls')),
]
만약 당신이 나처럼 django 1.2에 머물러 있고 RedirectView가 존재하지 않는다면, 리디렉션 매핑을 추가하는 다른 경로 중심적인 방법은 다음과 같습니다.
(r'^match_rules/$', 'django.views.generic.simple.redirect_to', {'url': '/new_url'}),
또한 일치하는 모든 항목을 재라우팅할 수 있습니다.이 기능은 앱의 폴더를 변경하지만 책갈피를 유지하려는 경우에 유용합니다.
(r'^match_folder/(?P<path>.*)', 'django.views.generic.simple.redirect_to', {'url': '/new_folder/%(path)s'}),
이것은 장고보다 더 좋습니다.URL 라우팅만 수정하려고 하고 .htaccess 등에 액세스할 수 없는 경우 shortcuts.redirect(I'm on Appengine and app.yaml은 .htaccess와 같은 해당 수준의 URL 리디렉션을 허용하지 않습니다).
또 다른 방법은 HttpResponsePermanentRedirect를 다음과 같이 사용하는 것입니다.
view.py 에서
def url_redirect(request):
return HttpResponsePermanentRedirect("/new_url/")
url.py 에서
url(r'^old_url/$', "website.views.url_redirect", name="url-redirect"),
언급URL : https://stackoverflow.com/questions/14959217/django-url-redirect
'programing' 카테고리의 다른 글
Python의 .isoformat() 문자열을 datetime 개체로 다시 변환하는 방법 (0) | 2023.09.04 |
---|---|
jQuery를 사용하여 버튼으로 모든 확인란을 선택/선택 취소하려면 어떻게 해야 합니까? (0) | 2023.09.04 |
PHP: 문자열을 각 문자에 대해 배열로 분할 (0) | 2023.09.04 |
C#에서 Excel interop 개체를 안전하게 폐기하시겠습니까? (0) | 2023.09.04 |
도커-공구함 마리애드브 용기 (0) | 2023.09.04 |