8

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

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

我试过重定向快捷方式:

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

并且

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

但这并没有明显的动作。

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

谢谢

4

1 回答 1

13

您可以滥用/利用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/')

也不要忘记添加RedirectMiddleware到您的MIDDLEWARE_CLASSES设置中。

于 2012-12-03T04:46:51.683 回答