在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 回答
呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊
從文檔(強調(diào)我的):
process_template_response()在視圖完成執(zhí)行后立即調(diào)用,如果響應(yīng)實例有render()方法,則表明它是 aTemplateResponse或等效的。
您聲明您正在使用django.http.shortcuts.render,其文檔內(nèi)容如下:
將給定的模板與給定的上下文字典相結(jié)合,并返回一個
HttpResponse帶有該呈現(xiàn)文本的對象。Django 不提供返回 a 的快捷函數(shù),
TemplateResponse因為 的構(gòu)造函數(shù)TemplateResponse提供與render().
因此render返回 a HttpResponse,而不是 a TemplateResponse,并且如上所述,process_template_response只為TemplateResponses 調(diào)用。
您要么需要將視圖更改為 return TemplateResponse,而不是使用render快捷方式,要么在其他地方執(zhí)行您的邏輯。我認(rèn)為您的邏輯可以在上下文處理器而不是中間件中實現(xiàn)。
添加回答
舉報
0/150
提交
取消
