使用 jinja2 模板提取嵌套字典

extracting nested dictionaries with jinja2 templates

我有这个带有嵌套字典的代码,我需要将它放入 jinja2 模板中,但运气不佳...

from jinja2 import Template

vlans = {"1": {"description": "default", "name": "default", "IP": {"IP1": "10.0.0.1", "IP2": "20.0.0.2"}}}

vlan_template = Template('''
{% for key,value in vlans.items() %}
#
vlan {{ key }}
 description {{ value.description }}
 name {{ value.name }}
 {% if value == "IP"%}
  {% for subkey,subvalue in value["IP"].items() %}
  ip address {{ subvalue.IP1 }}
  ip address {{ subvalue.IP2 }} secondary
  {% endfor %}
 {% endif %}
#
{% endfor %}

''')

print(vlan_template.render(vlans = vlans))

我正在尝试获得以下输出

#
vlan 1
 description default
 name default
 ip address 10.0.0.1
 ip address 20.0.0.2 secondary
#

谢谢, 马吕斯.

我已经找到了这段代码

from jinja2 import Template

vlans = {"1": {"description": "default", "name": "default", "IP": {"IP1": "10.0.0.1", "IP2": "20.0.0.2"}}}


vlan_template = Template('''
{%- for key,value in vlans.items() %}
 {%- for k,v in value.items() %}
#
vlan {{ key }}
 description {{ value.description }}
 name {{ value.name }}
 ip address {{ v.IP1 }}
 ip address {{ v.IP2 }}
#
 {%- endfor %}
{%- endfor %}

''')

print(vlan_template.render(vlans = vlans))

这给了我 3 次信息,但只有第 3 次是正确的

#
vlan 1
 description default
 name default
 ip address 
 ip address 
#
#
vlan 1
 description default
 name default
 ip address 
 ip address 
#
#
vlan 1
 description default
 name default
 ip address 10.0.0.1
 ip address 20.0.0.2
#

问题是我只想打印

#
vlan 1
 description default
 name default
 ip address 10.0.0.1
 ip address 20.0.0.2
#