Вложенный обход yaml с использованием шаблона jinja2 - PullRequest
0 голосов
/ 26 февраля 2020

a.yaml

Adir:
   test1:
    - param1
    - param2
Bdir:  
  test2:
    - param3
    - param4

Python код (py3)

from ruamel.yaml import YAML
from jinja2 import Environment, FileSystemLoader

if __name__ == "__main__":
    yaml = YAML(typ='safe')
    file = './a.yaml'
    ydata = yaml.load(open(file))
    env = Environment(loader=FileSystemLoader("templatedir"), trim_blocks=True, lstrip_blocks=True)
    gettmp = env.get_template('template.j2')
    test = gettmp.render(dict=ydata)

template.j2

 {% for dir in dict %}
 {% for test, value in dir.items() %}
 {{ dir }} - {{ test }} - {{ value }}
 {% endfor %}
 {% endfor %}

Я получаю следующую ошибку:

jinja2.exceptions.UndefinedError: 'str object' has no attribute 'items'

Я что-то здесь упускаю? при импорте jinja2 метод item () в шаблоне должен работать

1 Ответ

0 голосов
/ 27 февраля 2020

Вот решение моего вопроса:

template.j2

 {% for dir,tests in dict.items() %}
 {% for test, value in tests.items() %}
 {{ dir }} - {{ test }} - {{ value }}
 {% endfor %}
 {% endfor %}

Вывод:

 Adir - test1 - ['param1', 'param2']
 Bdir - test2 - ['param3', 'param4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...