我试图以一堆嵌套的无序列表的形式显示字典的内容和结构。
我设法收集的数据如下所示,
{'.': {'walk.py': None, 'what.html': None, 'misc': {}, 'orders': {'order1.html': None, 'more': {'stuff.html': None}}}}
代表这个目录树,
.:
misc/ orders/ walk.py what.html
./misc:
./orders:
more/ order1.html
./orders/more:
stuff.html
我将如何使用 Jinja2 语法对此进行迭代?有更好的方法吗?
提前致谢。
编辑:我觉得自己很愚蠢。再次寻找解决方案后,我发现了我正在寻找的东西。猜猜第一次尝试时我的 google-fu 并不真正适合我。 Here it is...
请您参考如下方法:
通过使用 for loop 的 recursive 修饰符(示例取自文档):
<ul class="sitemap">
{%- for item in sitemap recursive %}
<li><a href="{{ item.href|e }}">{{ item.title }}</a>
{%- if item.children -%}
<ul class="submenu">{{ loop(item.children) }}</ul>
{%- endif %}</li>
{%- endfor %}
</ul>
更新
这是我想到的:
from jinja2 import Template
x = Template("""{%- for key, value in tree.iteritems() recursive %}
{{ '--' * (loop.depth-1) }}{{ key }}
{%- if value is mapping -%}/{{ loop(value.iteritems()) }}{%- endif -%}
{%- endfor %}
""")
tree = {'.': {
'walk.py': None,
'what.html': None,
'misc': {},
'orders': {
'order1.html': None,
'more': {
'stuff.html': None
}
}
}}
print x.render(tree=tree)
输出:
./
--walk.py
--what.html
--misc/
--orders/
----order1.html
----more/
------stuff.html
(Jinja2 代码中的破折号(例如 {%- ... -%} 用于 whitespace control 。尝试一下。)
