我有一些自定义中间件可以创建一堆以前的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阶段添加的,所以在重定向发生之后会发生。我希望在第一个视图被重定向后,在中间件中检测到一些方法 - “重定向刚刚发生”,然后在中间件中我可以决定是否添加它。
答案 0 :(得分:3)
您可以在请求中设置一个标志,如果它应该添加到堆栈中并处理process_response
process_response(self, request, response):
if request.addToStack and not instanceof(response, HttpResponseRedirect):
#Add url from request to stack