개발/Python

Python + Django 페이지 리디렉션

MinorMan 2021. 1. 10. 01:04
반응형

<질문>

간단한 리디렉션 (예 :cflocationColdFusion에서 또는header(location:http://)PHP 용) 장고에서?


<답변1>

간단 해:

from django.http import HttpResponseRedirect

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

더 많은 정보는official Django docs

업데이트 : Django 1.0

Django에서이 작업을 수행하는 더 좋은 방법이 있습니다.generic views.

예 -

from django.views.generic.simple import redirect_to

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

    #etc...
)

더 있습니다generic views documentation. 크레딧-Carles Barrobés.

업데이트 # 2 : Django 1.3 이상

Django 1.5에서redirect_to더 이상 존재하지 않으며 다음으로 대체되었습니다.RedirectView. 신용Yonatan

from django.views.generic import RedirectView

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

<답변2>

원하는 것에 따라 (즉, 추가 전처리를 원하지 않는 경우), Django 's를 사용하는 것이 더 간단합니다.redirect_to일반보기 :

from django.views.generic.simple import redirect_to

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

    #etc...
)

보다documentation고급 예를 보려면.

Django 1.3 이상 사용 :

from django.views.generic import RedirectView

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

<답변3>

실제로 각 리디렉션에 대한보기를 갖는 것보다 더 간단한 방법이 있습니다.직접urls.py:

from django.http import HttpResponsePermanentRedirect

urlpatterns = patterns(
    '',
    # ...normal patterns here...
    (r'^bad-old-link\.php',
     lambda request: HttpResponsePermanentRedirect('/nice-link')),
)

A target can be a callable as well as a string, 이것이 제가 여기서 사용하고있는 것입니다.


<답변4>

Django 1.1 이후로 더 간단한redirect지름길:

from django.shortcuts import redirect

def myview(request):
    return redirect('/path')

또한 선택적인 영구 = True 키워드 인수를 사용합니다.


<답변5>

전체 하위 폴더를 리디렉션하려면url인수RedirectView is actually interpolated에서 다음과 같이 할 수 있습니다.urls.py:

from django.conf.urls.defaults import url
from django.views.generic import RedirectView

urlpatterns = [
    url(r'^old/(?P.*)$', 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)쿼리 문자열도 복사하려는 경우.


<답변6>

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에 있습니다.


<답변7>

조심하세요. 개발 서버에서이 작업을 수행했고 나중에 변경하고 싶었습니다.

변경하려면 캐시를 지워야했습니다. 앞으로 머리가 긁히는 것을 피하기 위해 다음과 같이 일시적으로 만들 수있었습니다.

from django.views.generic import RedirectView

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

<답변8>

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

https://docs.djangoproject.com/en/dev/ref/contrib/redirects/


<답변9>

page_path = urls.py에서 정의

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

<답변10>

이것은 대부분의 django 버전에서 작동하며 1.6.5에서 사용하고 있습니다.

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
    ....
    url(r'^(?P\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
    ....
)

이 솔루션에서 하드 코딩 된 URL 대신 URL 패턴의 이름을 계속 사용할 수 있습니다. url의 location_id 매개 변수는 람다 함수로 전달됩니다.

반응형