[python] 파이썬 + 장고 페이지 리디렉션

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 키워드 인수가 필요합니다.


답변

전체 하위 폴더를 리디렉션하려면 RedirectViewurl인수 가 실제로 보간 되므로 다음과 같이 할 수 있습니다 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/')),