我的自定义中间件返回呈现的响应(带有 RequestContext )。
这似乎导致了 csrf_token上下文变量设置为 NOTPROVIDED ( Djangos sentinel value for not provided ), 和 {% csrf_token %}没有输出,如the CSRF middleware is called on process_view ,我假设在这种情况下我们永远无法运行。
中间件呈现的响应并不复杂,它是一种很少使用的特殊情况,但是更改语言需要 CSRF token ,因为这是对 Djangos 内置的 POST 请求 set_language查看。
解决这个问题的最佳方法是什么?
请您参考如下方法:
process_request 中没有可用的 csrf token 的原因是 token 设置在 process_view 中csrf 中间件,在每个中间件的 process_request 之后运行,因此您需要将代码移至 process_view相反:
def process_view(self, request, view_func, view_args, view_kwargs):
if some_clause:
return render(request, 'foo.html', {'foo': 'bar'})
return view_func(request, view_args, view_kwargs)
