2012-03-13 65 views
4

我是一個完全失去新手試圖找出如何使我的硬編碼的動態生成的,不僅是作爲一個小白鍛鍊學習Django的,而且這樣的數據可以通過管理員進行編輯鏈接列表。 重要的是,它通過db生成時看起來與現在在硬編碼狀態下完全相同。Django的樹造型

這裏的主要內容需要通過模型來表示:

http://www.drugpolicyreformmovement.com/directory

我認爲我會先類標題的「類別」表,然後做一個鏈接「鏈接」表與ForeignKey關係返回到類別。我認爲在模板中,我會使用'ifchanged'模板標記與(嵌套?)for循環一起循環遍歷每個標題,以顯示每個標題的子記錄。

如果這變得複雜的是「研究&教育」的標題,其中一個子記錄都有自己的子記錄下。可能,尤其是。當我將這些代碼重用於其他項目時,我需要適應任意數量的子級別。

我已經花了兩天時間通過文檔和答案看這裏,我還沒有什麼,這將看起來像模型,視圖或模板的足夠清晰的畫面。

例如,你如何遍歷「下」子級別的模板,看看是否一個元素有孩子嗎?你怎麼做所有這些沒有擊中數據庫每個視圖一千次?

回答

6

你要做的就是:用django-mptt

這幾乎是將數據庫中的節點樹存儲起來並用最少的db訪問高效地檢索它的規範解決方案。它包含一些有用的模板標籤,可以幫助您輸出您想要的東西。

1

我會極力勸阻使用Django的MPTT爲兩個原因。

  1. 只需使用原始插入,就可以非常容易地破壞數據。
  2. 插入/移動/刪除一個項目會導致整個樹的更新。大樹可能會變慢。

使用本機Postgres字段ltree要好得多。雖然有一些缺點。它只是Postres而已。沒有django本地圖書館維護,你必須自己創建Postgres擴展。否則,您將收到錯誤type "ltree" does not exist。有和簡單的解決辦法:CREATE EXTENSION ltree;

django-tree回購似乎工作,但它正式不支持的Django 2.0