【发布时间】:2019-08-26 08:23:35
【问题描述】:
我无法让这个 jinja2 模板工作。有人可以帮帮我吗? 我试过 Jinja2 Live 模板,但没有得到我需要的结果。
假设我有以下 group_vars/all.yml 文件:
disk_iops: 500
disk_space:
"C:": 10
"D:": 10
"E:": 10
core_count: 8
还有以下模板:name.json.j2
{
"DiskIO": "{{ disk_iops }}",
{% if disk_space is defined and disk_space -%}
"DiskSpace": {
{%- set comma = joiner(",") -%}
{%- for key, value in disk_space.items() -%}
{{ comma() }}
"{{ key }}": "{{ value }}"
{%- endfor %}
},
{% endif -%}
"CoreCount": "{{ core_count }}"
}
我得到以下结果:
{
"DiskIO": "500",
"DiskSpace": {
"C:": "70",
"D:": "100",
"E:": "10" },
"CoreCount": "4"
}
但我希望 } 换行
【问题讨论】:
-
我认为
-%}破折号删除了空格。尝试删除它并查看。 -
FWIW,使用 Jinja 模板创建 YAML/JSON 有点误导。您应该简单地将数据结构创建为 dict/list 并使用适当的库调用对其进行编码。
-
@deceze 你能详细说明一下吗?我是新手,我不确定“作为 dict/list 并使用适当的库调用对其进行编码”。是。
-
正如@deceze 所说,您应该尝试直接转储json。如果你想让它漂亮,你总是可以使用
indent选项并设置level,比如json.dump(obj, fp, indent=4) -
@hansolo 我实际上并不是在编写 python 代码,而是在使用 ansible。