检测中间件中的响应重定向

时间:2013-04-25 10:21:46

标签: django middleware

我有一些自定义中间件可以创建一堆以前的URL,以便可以从后续页面导航回来。

在我的一个将其url添加到堆栈的视图中,有一些逻辑可以将响应重定向到另一个页面,因此:

@middleware_decorator # tells the middleware to add this views url to the stack when it is called
def some_view(request):
    ... stuff ...

    if some_condition:
        return HttpResponseRedirect(url, kwargs)

我遇到的问题是,如果我点击了响应重定向条件,我不想将当前的url添加到堆栈中,因为当它们从下一页返回时,它们将再次达到相同的条件,被重定向到他们刚刚离开的页面。我在中间件中有一个“删除”功能,但我不能这样称呼它:

if some_condition:
    Middleware.remove("this views url")
    return HttpResponseRedirect(url, kwargs)

因为视图URL是出于逻辑原因而在中间件的process_response阶段添加的,所以在重定向发生之后会发生。我希望在第一个视图被重定向后,在中间件中检测到一些方法 - “重定向刚刚发生”,然后在中间件中我可以决定是否添加它。

1 个答案:

答案 0 :(得分:3)

您可以在请求中设置一个标志,如果它应该添加到堆栈中并处理process_response

中实际添加的功能
process_response(self, request, response):
    if request.addToStack and not instanceof(response, HttpResponseRedirect):
        #Add url from request to stack