分享
三行代码  ›  专栏  ›  技术社区  ›  Saturnix

Django中未调用进程模板响应

  •  1
  • Saturnix  · 技术社区  · 7 月前

    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 我有:

    MIDDLEWARE = [
    ...
        'app.middleware.NoTrackingMiddleware',
    ]
    

    process_template_response 它会被忽略 pub_id

    为什么?

    1 回复  |  直到 7 月前
        1
  •  1
  •   solarissmoke    7 月前

    documentation (强调我的):

    process_template_response() 如果响应实例具有 render() 方法,指示它是 TemplateResponse .

    django.http.shortcuts.render ,谁的 documentation

    将给定的模板与给定的上下文词典组合并返回 HttpResponse 对象的文本。

    Django不提供返回 因为 模板响应 渲染() .

    render 返回 ,不是 模板响应 process_template_response 只需要 模板响应 s。

    你要么改变你的看法 模板响应 提供 捷径,或在别处执行逻辑。我认为你的逻辑可以在 context processor