Django - создать вложенный список HTML из списка объектов словаря - PullRequest
1 голос
/ 05 мая 2011

У меня есть список словаря 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, основанный на Parent, например.

  • obj1
    • obj2
      • obj4
        • obj5
    • obj3

Как это сделать в шаблоне Django

1 Ответ

3 голосов
/ 05 мая 2011

Быстрое решение:

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, вы должны написать собственный тег или фильтр для этого.

...