#jinja2
Вопрос:
Я начал использовать шаблоны jinja2 для создания ответа json с использованием некоторых динамических данных, которые будут считываться из файла yaml. Мне нужно добавить несколько полей постоянного ключа:значения к каждому объекту в выходном json. Я не знаю, как использовать силу дзиндзя, чтобы сделать это. Пожалуйста, помогите мне здесь.
Входные данные YML->
tags:
- "key": "SubRegion:North America"
- "key": "Region"
"value": "America"
Вывод желаний (json):
{
"tags":
{
"FixedKey1": "FixedValue1",
"FixedKey2": "FixedValue2",
"key": "SubRegion:North America"
},
{
"FixedKey1": "FixedValue1",
"FixedKey2": "FixedValue2",
"key": "Region",
"value": "America"
}
}
Мое решение (неполное):
{% macro eval_tag(value) -%}
{% if value -%}
{{ value }}
{%- else -%}
[]
{%- endif %}
{%- endmacro -%}
{
"tags": {{ eval_tag(tags) }}
}
Обновить
Я нашел свой ответ, но, возможно, это не лучший способ. Так что я все еще открыт для предложений.
В любом случае я обновил свой код, как указано ниже:
Изменение макроса:
{% macro eval_tag(value) -%}
{% if value -%}
{%- for val in value %}
{% do val.update({ "source": "USER", "context": "CONTEXTLESS" }) %}
{% endfor %}
{{ value }}
{%- else -%}
[]
{%- endif %}
{%- endmacro -%}
Изменение файла Python:
def add_to_dict(x,y): return dict(x, **y)
...
env = jinja2.Environment(extensions=['jinja2.ext.do'], loader=jinja2.FileSystemLoader(path or './'))
env.filters['add_to_dict'] = add_to_dict
out = env.get_template(filename).render(yml_data)