Skip to main content
 首页 » 编程设计

python之在 Jinja2 中显示嵌套字典

2025年05月04日14bjzhanghao

我有以下 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]}}}) 

希望对我的英语不好的你有用:)