답변:
간단 해:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
공식 Django 문서 에 대한 추가 정보
업데이트 : Django 1.0
Django 에서이 작업을 수행하는 더 좋은 방법이 generic views
있습니다.
예 -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
일반 뷰 문서에 더 있습니다 . 신용 -Carles Barrobés .
업데이트 # 2 : Django 1.3+
Django 1.5에서 redirect_to 는 더 이상 존재하지 않으며 RedirectView 로 대체되었습니다 . 요나탄 크레딧
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
에서 사용하지 않는 이유 는 django.shortcuts
무엇입니까?
('^pattern/$', lambda x: redirect('/redirect/url/'))
원하는 것에 따라 (즉, 추가 전처리를 원하지 않는 경우) Django의 redirect_to
일반 뷰를 사용하는 것이 더 간단합니다 .
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
고급 예제는 설명서 를 참조하십시오 .
Django 1.3 이상을 사용하는 경우 :
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
실제로 각 리디렉션에 대한보기를 갖는 것보다 간단한 방법이 있습니다 . urls.py
다음 에서 직접 수행 할 수 있습니다 .
from django.http import HttpResponsePermanentRedirect
urlpatterns = patterns(
'',
# ...normal patterns here...
(r'^bad-old-link\.php',
lambda request: HttpResponsePermanentRedirect('/nice-link')),
)
대상은 문자열뿐만 아니라 호출 가능 할 수 있습니다 . 여기서 내가 사용하고 있습니다.
redirect_to
django와 함께 제공 되는 일반적인 뷰를 사용하는 것이 여전히 간단하고 읽기 쉽습니다. Carles answer stackoverflow.com/questions/523356/python-django-page-redirect/…를
전체 하위 폴더를 리디렉션하려면 RedirectView 의 url
인수 가 실제로 보간 되므로 다음과 같이 할 수 있습니다 urls.py
.
from django.conf.urls.defaults import url
from django.views.generic import RedirectView
urlpatterns = [
url(r'^old/(?P<path>.*)$', RedirectView.as_view(url='/new_path/%(path)s')),
]
?P<path>
당신 캡처가에 공급됩니다 RedirectView
. 이 캡처 된 변수는 url
사용자가 제공 한 인수 로 대체되어 /new_path/yay/mypath
원래 경로가 이었다면 우리에게 알려줍니다 /old/yay/mypath
.
….as_view(url='…', query_string=True)
쿼리 문자열을 복사하려는 경우 에도 수행 할 수 있습니다 .
조심하십시오. 개발 서버에서이 작업을 수행 한 후 나중에 변경하고 싶었습니다.
캐시를 변경하여 변경해야했습니다. 앞으로이 헤드 스크래치를 피하기 위해 다음과 같이 일시적으로 만들 수있었습니다.
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),
관리 섹션에서이 작업을 수행 할 수 있습니다. 설명서에 설명되어 있습니다.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
이것은 대부분의 django 버전에서 작동하며 1.6.5에서 사용하고 있습니다.
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
....
url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
....
)
이 솔루션에서는 하드 코딩 된 URL 대신 URL 패턴의 이름을 계속 사용할 수 있습니다. URL의 location_id 매개 변수는 람다 함수로 전달됩니다.