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

问题描述 投票:6回答:1

在视图函数之外,是否有一种方法可以重定向到Django中的另一个页面。

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

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

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

还有

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

但是这没有明显的作用。

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

谢谢

python django django-views python-2.6
1个回答
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/')

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

© www.soinside.com 2019 - 2024. All rights reserved.