当有字典时:
menu = {'title': 'Link1',
'children': {'title': 'Child of Link1',
'children': #etc..}
}
如何迭代它以使输出变为:
<ul>
<li>Link1
<ul>
<li>Child of Link 1
<ul>
<li>Grandchild of Link 1
<ul>etc..</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
目前我使用它,但它显然只有一个深度。
<ul id="mainnavigation">
{% for k,v in admin.items %} #ContextProcessor, because this menu needs to know the current path.
<li class="expandable"><a href="{{ v.path }}">{{ v.title }}</a>
{% if v.children != None %}
<ul>
{% for id,child in v.children.items %}
<li class="expandable"><a href="{{ child.path }}">{{ child.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
一种方法是手动重复每个级别的循环,但是这样的解决方案很难看,我希望有一个更干的。
答案 0 :(得分:1)
您必须为此制作自定义模板标记。我会选择inclusion tag。
{% for k,v in var %}
{% my_tag v.children %}
{% endfor %}
答案 1 :(得分:1)
如果您已经知道每个部分都将拥有冠军头衔每个孩子,为什么不只是做嵌套元组?然后,您可以使用内置过滤器unordered_list
。
所以,它是:
menu = (Link 1 (Child of Link 1 (Grandchild of Link 1 (...) )))
和
<ul id="mainnavigation">
{{ menu|unordered_list }}
</ul>