2010-03-23 32 views
1

我想在我的請求對象中包含一個初始化的數據結構,使它可以在我的模板中的上下文對象中訪問。我在做什麼,現在是手動和煩人的傳遞我所有的觀點中:Django:請求對象到模板上下文透明性

render_to_response(...., ({'menu': RequestContext(request)})) 

請求對象包含鍵,值對其中使用自定義背景處理器注射。雖然這是有效的,但我希望有更通用的方式將請求對象的選定部分傳遞給模板上下文。我試着通過泛型視圖傳遞它,但事實證明,請求對象在解析urlpatterns列表時沒有實例化。

+0

有一種方法可以實現我自己的render_to_response快捷方式,它包裝了django實現。 – Anders 2010-03-23 09:29:08

+0

尋找http://stackoverflow.com/search?q=%5Bdjango%5D+middleware和http://stackoverflow.com/search?q=%5Bdjango%5D+context,與此密切相關的許多問題。 – 2010-03-23 10:14:23

+0

確切的重複:http://stackoverflow.com/questions/2269508/django-template-context-processor-request-variable – 2010-03-23 10:15:33

回答

1

要做到這一點,您可能需要create your own middleware。這樣,您可以完全控制請求,無論是在視圖函數之前還是之後。

中間件是一個非常強大的概念,並不像它看起來那樣難以實現,但不要過分 - 它使得很難遵循程序流程。

+0

是的,這似乎是要走的路。它正確地裝飾我的請求對象。我們做了一個自定義的快捷方式來替換'render_to_response' - 它只是使用'render_to_response',但它也傳遞了RequestContext(request)參數! – Anders 2010-04-07 18:19:29

0

我不一定非常理解你的問題。

要麼你抱怨不得不在所有視圖中包含RequestContext,在這種情況下,你需要編寫一個爲你傳遞RequestContext的包裝器。但是你仍然需要傳遞請求。如果你也不想這樣做,你可能需要按照mikl的建議創建自己的中間件。

或者,你抱怨必須在每個視圖中傳遞很多菜單項。哪種做法是錯誤的,您需要define a template context processor,以確保這些默認情況下存在於模板中。