2011-06-11 40 views
2

我有以下中間件類:Django的中間件process_template_response方法不會被調用

class CommonContextMiddleware: 
    def process_template_response(self, request, response): 
     # Get the context and top videos 
     context = response.context_data 

     ... 

     # Add most_recent and most_viewed to the context... 
     context['most_recent'] = top_videos['most_recent'][:3] 
     context['most_viewed'] = top_videos['most_viewed'][:3] 

     # ...then continue rendering 
     return response 

但是,不管是什麼,我把在功能方面,它永遠不會被調用。我推測這種方法將被調用,每個模板響應生成,我錯了嗎?

在此先感謝。

回答

4

我假設你在談論「模板響應」時,你實際上是從你的Django視圖返回一個TemplateResponse

這不是真的這種事情的最佳場所。如果您只是想將變量添加到每個模板上下文中,則最好的做法是在context processor中。

+0

我剛剛閱讀這個答案,因爲我用TemplateResponse(...)手動替換了每個HttpResponse(t.render(c)),我知道有一種更簡單的方法。謝謝!順便說一下,在上下文處理器中,如果兩個變量具有相同的名稱(從處理器返回並且在上下文中返回一個),哪一個會贏? – Saul 2011-06-11 22:28:12

+0

很奇怪render()與指定的模板不會返回TemplateResponse。特別奇怪,因爲內置的'django.contrib.auth.views.login'返回它。所以我需要中間件和模板上下文處理器來確保注入變量。奇怪。模板上下文處理器將模板變量字典彼此隔離,這是非靈活的(但可能更容易出錯)。 – 2015-06-17 11:36:08

+1

@danielRoseman:'TempleResponse'網址現在是404! – NoobEditor 2015-09-11 12:28:43