문제

간단한 리디렉션을 어떻게 달성합니까 (예 : cflocation 콜드 퓨전에서 header(location:http://) php) django에서?

도움이 되었습니까?

해결책

간단 해:

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 더 이상 존재하지 않으며 대체되었습니다 리디렉션 뷰. 신용 요나타

from django.views.generic import RedirectView

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

다른 팁

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

또한 선택적인 영구 = 진정한 키워드 인수가 필요합니다.

전체 하위 폴더를 리디렉션하려면 url 인수 RedirectView는 실제로 보간되었습니다, 당신은 이런 일을 할 수 있습니다 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/')),

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

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

page_path = urls.py에서 정의합니다

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

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top