2012-12-03 3 views
4

뷰 기능 밖에있을 때 Django의 다른 페이지로 리다이렉션하는 방법이 있나요?Django HTTP 리다이렉트 뷰 기능

클라이언트로 HTTP 응답을 되돌릴 때가 아니라 내 앱에서 어느 곳 으로든 리디렉션 할 수 있어야합니다.

from django.shortcuts import redirect 
redirect("/some/url") 

또한

redirect("http://someserver.com/some/url") 

을하지만이 더 눈에 띄는 행동을하지 않습니다 :

나는 리디렉션 바로 가기를 시도했습니다.

스크립트 안에는 어디서나 사용할 수있는 header("Location: /some/url");과 같은 것이 필요합니다. 당신은 미들웨어의 process_exception 남용 할 수

감사

+0

재 내가 생각하는 뷰 기능을 외부에서 수행 할 수 없습니다. – arulmr

+0

뷰 메소드는 요청이 맵핑 될 때, 즉 실행될 때 trigged됩니다. 아무 것도 요구하지 않으면 (즉, 링크를 클릭하거나 페이지를로드하지 않으면)보기 기능이 실행되지 않으므로보기 기능 바깥으로 아무것도 리디렉션하지 않아도됩니다. 실제로 당신이하려는 것은 무엇입니까? –

+1

사용자가 링크를 클릭하고 뷰 기능이 실행 중이지만 해당 뷰 함수는 템플릿을 채우고 리디렉션이 필요한 다양한 로직을 포함하는 다른 라이브러리 (표준보기 컨트롤러 구현)를 호출합니다. –

답변

5

: 그런 다음 할 수

# middleware.py 
from django import shortcuts 

class Redirect(Exception): 
    def __init__(self, url): 
     self.url = url 

def redirect(url): 
    raise Redirect(url): 

class RedirectMiddleware: 
    def process_exception(self, request, exception): 
     if isinstance(exception, Redirect): 
      return shortcuts.redirect(exception.url) 

:

from middleware import redirect 
redirect('/some/url/') 
+1

이것은 도움이되었지만 RedirectMiddleware 클래스를 MIDDLEWARE_CLASSES 설정에 추가해야한다는 점을 추가하는 것이 좋습니다. 'appname.middleware.RedirectMiddleware', –

관련 문제