Django - 从字典对象列表中创建嵌套的html列表

时间:2011-05-05 09:22:05

标签: python django django-templates

我有一个字典的Python列表,例如。

[{'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}]

我想把它写成一个基于父节点的嵌套html列表。

  • OBJ1
    • OBJ2
      • OBJ4
        • obj5
    • OBJ3

如何在Django模板中执行此操作

1 个答案:

答案 0 :(得分: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>)也会创建<ul><li>elem</li></ul>列表,但您可以使用CSS更改显示内容。

如果您想要更清晰的HTML,您应该为此编写自定义标记或过滤器。