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


답변:


250

간단 해:

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/')),
)

8
이것은 더 이상 장고 1.0에서 가장 좋은 방법이 아닙니다. 이 답변을 참조하십시오 : stackoverflow.com/questions/523356/python-django-page-redirect/…
Jake

2
redirect에서 사용하지 않는 이유 는 django.shortcuts무엇입니까?
Afshin Mehrabani

4
내가 사용하는('^pattern/$', lambda x: redirect('/redirect/url/'))
mrmagooey

5
이것은 장고 1.5부터 더 이상 사용되지 않습니다. 대신 'RedirectView'를 사용하십시오 : docs.djangoproject.com/en/1.5/ref/class-based-views/base/…
Yonatan

실제로 더 이상 사용되지 않습니다. 더 이상 사용되지 않는 것은 무엇입니까? 리디렉션? 이 방법을 사용하면 매개 변수 값을 람다, 즉 url (r '^ (? P <location_id> \ d +) / $', 람다 x에 전달하는 방법을 모르겠습니다. HttpResponseRedirect (reverse ( 'dailyreport_location', args = [ '% (location_id)',]))) 작동하지 않음
radtek

113

원하는 것에 따라 (즉, 추가 전처리를 원하지 않는 경우) 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/')),
)

(현재) 가장 많이 투표 된 답변에서와 같이 (간단하게) 자신을 구현하는 대신 일반적인 견해를 사용하여 +1하십시오.

사람이 당신이 경우에 대한 예제가 있나요 않는 추가 사전 처리를 싶지을?
eageranalyst 2016 년

1
그런 다음 처리를 수행하고 일반보기를 호출하는 사용자 정의보기를 작성하거나 pre_process와 같은 데코레이터를 작성하고 일반보기를 장식하십시오 : (r '^ one / $', pre_process (redirect_to), { 'url ':'/ another / '})
Carles Barrobés

1
@niallsco : 추가 처리를 원한다면 여기
Lie Ryan

1
django 1.4에서 redirect_to를 가져 오면 타락 경고가 나타납니다.
joctee

38

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

from django.http import HttpResponsePermanentRedirect

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

대상은 문자열뿐만 아니라 호출 가능 할 수 있습니다 . 여기서 내가 사용하고 있습니다.


2
사실이지만 redirect_todjango와 함께 제공 되는 일반적인 뷰를 사용하는 것이 여전히 간단하고 읽기 쉽습니다. Carles answer stackoverflow.com/questions/523356/python-django-page-redirect/…를
Day

28

Django 1.1부터는 더 간단한 리디렉션 바로 가기를 사용할 수도 있습니다 .

from django.shortcuts import redirect

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

또한 선택적인 permanent = True 키워드 인수가 필요합니다.


14

전체 하위 폴더를 리디렉션하려면 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)쿼리 문자열을 복사하려는 경우 에도 수행 할 수 있습니다 .


10

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


6

조심하십시오. 개발 서버에서이 작업을 수행 한 후 나중에 변경하고 싶었습니다.

캐시를 변경하여 변경해야했습니다. 앞으로이 헤드 스크래치를 피하기 위해 다음과 같이 일시적으로 만들 수있었습니다.

from django.views.generic import RedirectView

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


1

page_path = urls.py에서 정의

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

0

이것은 대부분의 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 매개 변수는 람다 함수로 전달됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.