Django - 从字典对象列表创建嵌套HTML列表

1 投票
1 回答
1385 浏览
提问于 2025-04-16 17:02

我有一个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 个回答

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,建议你自己写一个自定义标签或过滤器。

撰写回答