亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有在 Django 中調用 process_template_response

沒有在 Django 中調用 process_template_response

哆啦的時光機 2022-07-26 21:52:10
在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只為TemplateResponses 調用。

您要么需要將視圖更改為 return TemplateResponse,而不是使用render快捷方式,要么在其他地方執行您的邏輯。我認為您的邏輯可以在上下文處理器而不是中間件中實現。


查看完整回答
反對 回復 2022-07-26
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號