1

我有一些自定义中间件,可以创建一堆以前的 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 阶段添加的,所以在重定向发生之后发生。我希望在第一个视图被重定向之后在中间件中检测到某种方式 - “重定向刚刚发生”,然后在中间件中我可以决定是否添加它。

4

1 回答 1

3

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

process_response(self, request, response):
    if request.addToStack and not instanceof(response, HttpResponseRedirect):
        #Add url from request to stack
于 2013-04-25T10:29:21.963 回答