2014-03-28 118 views
0

我有一個名爲message_base的基礎模板,它擴展了主基礎模板,我需要在message_base中顯示一個動態菜單...現在我知道我可以使用模板上下文處理器,但我想知道是否有任何方法可以限制數據只能從message_base及其子頁面訪問,而不是整個應用程序,因爲我認爲在每個請求中向所有頁面發送數據是不必要的。Django動態嵌套模板

感謝

回答

0

發送數據到所有頁面不僅是不必要的;這是危險的。最終的情況看起來很像如果你在任何地方使用全局變量會發生什麼情況。

我不確定是否有更好的方法來做你想做的事情,所以我只是想告訴你我們做了什麼。

不是擴展base_template,而是在那裏添加一個上下文變量,比如{{ message_area }}。然後,我將在message_base模板上將該上下文變量設置爲render()的輸出。例如:

base_template.render(Context({..., 'message_area': message_base.render(...)})) 

這使得只有message_base應該與本地化到message_base有關的數據保留。

+0

有趣的解決方案,我會嘗試一下,謝謝 – user3474181

0

message_base不是一個單獨的頁面。它是由Django的模板引擎提供的一個頁面的一部分。 message_base延伸base模板,這意味着它是使用父模板base和子模板message_base構建的同一頁的一部分。您的數據已經可用於整個應用程序。一旦模板被渲染,只有HTML被髮送回瀏覽器。並不是每個請求都會發回數據,然後模板會在瀏覽器端呈現。

+0

是的,但如果我設置了模板上下文處理器,數據將與每個請求一起發送,即使請求的頁面沒有利用日期...就像驗證用戶信息(用戶對象) – user3474181

+0

Umm號如果上下文變量不在模板中使用,沒有任何內容會被髮送回瀏覽器。瀏覽器只關心HTML。您的模板將由Django使用上下文變量呈現,HTML將被生成併發回。而已。如果您不使用模板中的上下文變量,則不會將其發送回瀏覽器。 –