2011-07-17 105 views
1

我有一個有各種不同的盒子,可以去它根據網頁上的側邊欄的Django網站調用的數據庫查詢。例如,「最新評論」或「最新推文」或「精選故事」。這些框都需要運行數據庫查詢。Django的:從模板

我可以簡單地增加一個most_recent_comments和任何其他變量都需要查看每一頁。但是這感覺很脆弱。我希望能夠通過編輯模板來移動和更改框。

所以我的另一個想法是我可以將所有框可能需要的所有變量添加到每個頁面上的Context處理器,但是ORM是否足夠智能,只能爲實際使用這些變量的頁面運行查詢?或者即使我在頁面上沒有框,它會打到數據庫?

所以我想我想要的是某種自定義標記,我可以只說{%most_recent_comments_box%},它足夠聰明,可以從數據庫中加載所需的任何變量,然後調用一個小模板文件。這是正確的方法嗎?我如何實現這一目標?

回答

1

所以我其他的想法是,我可以補充一點,所有的箱子可能需要用上下文處理器的每個頁面的所有變量,但它是ORM足夠聰明,只運行查詢的實際使用這些變量頁面?或者即使我在頁面上沒有框,它會打到數據庫?

是的,ORM將是足夠聰明,這樣做。 Django QuerySets是懶惰的:https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy

+0

好極了!所以你認爲上下文處理器是最好的解決方案? – Eli

4

這是用例的自定義模板標籤。閱讀this article(由後面的Django的人一個書面)。

任一方式的Django因爲這文章寫的是inclusion tag快捷方式,它實現了你所提到的「撥打一個小模板文件」的做法。