我有以下 Jinja2 模板:
{% block body %}
{% for key in tree recursive %}
{% set outer_loop = loop %}
{% for subkey in tree[key] %}
{% if subkey == 'R' %}
{{ tree[key][subkey] }}
{% else %}
{{ outer_loop(dict([(subkey, tree[key][subkey])])) }}
{% endif %}
{% endfor %}
{% endfor %}
{% endblock body %}
其中 tree 是一个 Python 字典,例如:
tree = {"A": {"R": [1, 2, 3], "B": {"R": [4, 5, 6]}}}
和dict() 是Python library function .
问题是模板只显示 [1, 2, 3] 而不是预期的 [1, 2, 3][4, 5, 6] .
很明显,我误解了 Jinja 中递归的工作原理;有什么提示吗?
请您参考如下方法:
为什么要用'double for'来控制呢? 我正在尝试按如下方式使用“单一 for”进行编码,看起来没问题:
from jinja2 import Template
template = Template(
"""
{%- for key, value in tree.items() recursive%}
{%-if key != "R"%}
{{loop(value.items())}}
{%- else %}
{{value}}
{%- endif %}
{%- endfor%}
""")
print template.render(tree = {"A": {"R": [1, 2, 3], "B": {"R": [4, 5, 6]}}})
希望对我的英语不好的你有用:)
