views.py 我用 render() .
views.py
render()
from django.conf import settings class 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 我有:
settings.py
MIDDLEWARE = [ ... 'app.middleware.NoTrackingMiddleware', ]
process_template_response 它会被忽略 pub_id
process_template_response
pub_id
为什么?
从 documentation (强调我的):
process_template_response() 如果响应实例具有 render() 方法,指示它是 TemplateResponse .
process_template_response()
TemplateResponse
django.http.shortcuts.render ,谁的 documentation
django.http.shortcuts.render
将给定的模板与给定的上下文词典组合并返回 HttpResponse 对象的文本。 Django不提供返回 因为 模板响应 渲染() .
将给定的模板与给定的上下文词典组合并返回 HttpResponse 对象的文本。
HttpResponse
Django不提供返回 因为 模板响应 渲染() .
模板响应
渲染()
render 返回 ,不是 模板响应 process_template_response 只需要 模板响应 s。
render
你要么改变你的看法 模板响应 提供 捷径,或在别处执行逻辑。我认为你的逻辑可以在 context processor
提供