Django cflocation
에서 간단한 리디렉션 (예 : ColdFusion 또는 header(location:http://)
PHP)을 어떻게 수행합니까?
답변
간단 해:
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/')),
)
답변
원하는 것에 따라 (즉, 추가 전처리를 원하지 않는 경우) 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')),
)
대상은 문자열뿐만 아니라 호출 가능 할 수 있습니다 . 여기서 내가 사용하고 있습니다.
답변
Django 1.1부터는 더 간단한 리디렉션 바로 가기를 사용할 수도 있습니다 .
from django.shortcuts import redirect
def myview(request):
return redirect('/path')
또한 선택적인 permanent = True 키워드 인수가 필요합니다.
답변
전체 하위 폴더를 리디렉션하려면 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)
쿼리 문자열을 복사하려는 경우 에도 수행 할 수 있습니다 .
답변
Django 버전 1.3에서 클래스 기반 접근 방식은 다음과 같습니다.
from django.conf.urls.defaults import patterns, url
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^some-url/$', RedirectView.as_view(url='/redirect-url/'), name='some_redirect'),
)
이 예제는 urls.py에 있습니다.
답변
조심하십시오. 개발 서버에서이 작업을 수행 한 후 나중에 변경하고 싶었습니다.
캐시를 변경하여 변경해야했습니다. 앞으로이 헤드 스크래치를 피하기 위해 다음과 같이 일시적으로 만들 수있었습니다.
from django.views.generic import RedirectView
url(r'^source$', RedirectView.as_view(permanent=False,
url='/dest/')),