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