在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
提交
取消