itsource

Python + 장고 페이지 리디렉션

mycopycode 2023. 7. 16. 13:18
반응형

Python + 장고 페이지 리디렉션

간단한 리디렉션을 수행하는 방법(예:cflocation콜드퓨전에서, 또는header(location:http://)PHP의 경우) 장고에서?

간단합니다.

from django.http import HttpResponseRedirect

def myview(request):
    ...
    return HttpResponseRedirect("/path/")

더 많은 정보는 공식 장고 문서에 있습니다.

업데이트: 장고 1.0

현재 장고에서 이것을 하는 더 나은 방법이 분명히 있습니다.generic views.

예 -

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',   
    (r'^one/$', redirect_to, {'url': '/another/'}),

    #etc...
)

일반 보기 문서에 더 많은 내용이 있습니다.신용 - Carles Barrobes.

업데이트 #2: 장고 1.3+

Django 1.5에서는 redirect_to가 더 이상 존재하지 않으며 RedirectView로 대체되었습니다.요나탄에 대한 신용

from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^one/$', RedirectView.as_view(url='/another/')),
)

원하는 것에 따라(예: 추가 사전 처리를 원하지 않는 경우), 장고의 것만 사용하는 것이 더 간단합니다.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')

또한 옵션인 영구 =도 필요합니다.참 키워드 인수입니다.

전체 하위 폴더를 리디렉션하려면urlRedirectView의 인수는 실제로 보간되므로 다음과 같은 작업을 수행할 수 있습니다.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'),
)

이 예제는 URL에 저장됩니다.파이의

주의하세요. 개발 서버에서 이 작업을 수행했기 때문에 나중에 변경하려고 합니다.

저는 그것을 바꾸기 위해 캐시를 지워야 했습니다.앞으로 이러한 머리 긁힘을 피하기 위해 다음과 같이 임시로 만들 수 있었습니다.

from django.views.generic import RedirectView

url(r'^source$', RedirectView.as_view(permanent=False, 
                                      url='/dest/')),

page_path = URL로 정의합니다.파이의

def deletePolls(request):
    pollId = deletePool(request.GET['id'])
    return HttpResponseRedirect("/page_path/")

관리 섹션에서 이 작업을 수행할 수 있습니다.설명서에 설명되어 있습니다.

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 매개 변수는 람다 함수로 전달됩니다.

언급URL : https://stackoverflow.com/questions/523356/python-django-page-redirect

반응형