2011-05-05 135 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,你应该写一个自定义标签或过滤器。