2011-05-05 136 views
1

我有一個Python列表的字典形式例如Django - 從字典對象列表創建嵌套的html列表

[{'Parent':'top', 'Child':'obj1', 'Level':0}, 
{'Parent':'obj1', 'Child':'obj2', 'Level':1}, 
{'Parent':'obj1', 'Child':'obj3', 'Level':1}, 
{'Parent':'obj2', 'Child':'obj4', 'Level':2}, 
{'Parent':'obj4', 'Child':'obj5', 'Level':3}] 

我想把它寫成基於Parent的嵌套html列表,

  • OBJ1
    • OBJ2
      • OBJ4
        • obj5
    • OBJ3

我怎樣才能做到這一點在Django模板

+2

你爲什麼要創建一個扁平的字典?什麼是「原始」信息? – 2011-05-05 10:03:08

+0

來自數據庫表 – John 2011-05-05 10:18:27

+0

不是一個真正有用的答案。你能**更新**問題以顯示錶格和查詢嗎?我懷疑查詢(或模型)可以修復爲正確嵌套。 – 2011-05-05 10:45:21

回答

3

快速的解決方案:

def make_list(d): 
    def append_children(parent, d): 
     children = [[x['Child']] for x in d if x['Parent'] == parent[0]] 
     if children: 
      parent.append(children) 
      for child in children: 
       append_children(child, d) 

    results = [[x['Child']] for x in d if x['Parent'] == 'top'] 
    for parent in results: 
     append_children(parent, d) 

    return results 

合格名單到這個功能,然後應用unordered_list過濾結果。此方法的缺點是即使對於一個元素(<ul><li>elem</li></ul>)也會創建<ul>列表,但您可以隨意使用CSS來更改顯示。

如果你想更清晰的HTML,你應該寫一個自定義標籤或過濾器。