#python #django #django-templates
#python #django #django-шаблоны
Вопрос:
У меня есть список словаря 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
- obj4
- obj3
- obj2
Как я могу это сделать в шаблоне Django
Комментарии:
1. Зачем вы создаете плоский словарь? Какова «исходная» информация?
2. На самом деле не очень полезный ответ. Можете ли вы обновить вопрос, чтобы отобразить таблицу и запрос? Я подозреваю, что запрос (или модель) можно исправить, чтобы он был правильно вложенным.
Ответ №1:
Быстрое решение:
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, вам следует написать для этого пользовательский тег или фильтр.