在views.py我使用render().在 app -> middleware.py 我有这个代码:from django.conf import settingsclass NoTrackingMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): response = self.get_response(request) return response def process_template_response(self, request, response): no_tracking = True if request.GET.get("NO_TRACKING", default=False) is not False else False pub_id = "PUBLISHER_TEST" if no_tracking is True else settings.WFF_PUB_ID response.context_data["no_tracking"] = no_tracking response.context_data["pub_id"] = pub_id return response在settings.py我有:MIDDLEWARE = [... 'app.middleware.NoTrackingMiddleware',]然而,如果我在它处放置一个断点,process_template_response它就会被忽略并且pub_id总是空的。为什么?
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
从文档(强调我的):
process_template_response()
在视图完成执行后立即调用,如果响应实例有render()
方法,则表明它是 aTemplateResponse
或等效的。
您声明您正在使用django.http.shortcuts.render
,其文档内容如下:
将给定的模板与给定的上下文字典相结合,并返回一个
HttpResponse
带有该呈现文本的对象。Django 不提供返回 a 的快捷函数,
TemplateResponse
因为 的构造函数TemplateResponse
提供与render()
.
因此render
返回 a HttpResponse
,而不是 a TemplateResponse
,并且如上所述,process_template_response
只为TemplateResponse
s 调用。
您要么需要将视图更改为 return TemplateResponse
,而不是使用render
快捷方式,要么在其他地方执行您的逻辑。我认为您的逻辑可以在上下文处理器而不是中间件中实现。
添加回答
举报
0/150
提交
取消