Django HTTP重定向在视图功能之外

时间:2012-12-03 04:31:10

标签: python django django-views python-2.6

当在视图函数之外时,有没有办法在Django中重定向到另一个页面。

我需要能够在我的应用中的任何地方重定向,而不仅仅是在我将HTTP响应返回给客户端时。

我尝试过重定向快捷方式:

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

以及

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

但这并没有明显的行动。

我需要PHP中的header("Location: /some/url");,可以在脚本内的任何地方使用。

由于

1 个答案:

答案 0 :(得分:9)

您可以滥用process_exception中间件:

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