извлечение вложенных словарей с помощью шаблонов jinja2 - PullRequest
0 голосов
/ 02 августа 2020

у меня есть этот код с вложенными словарями, которые мне нужно вставить в шаблон 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
#

спасибо, Мариус.

1 Ответ

0 голосов
/ 02 августа 2020

Мне удалось получить этот код

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
#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...