【问题标题】:What whitespace modifier am I missing? [duplicate]我缺少什么空格修饰符? [复制]
【发布时间】: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。

标签: python ansible jinja2


【解决方案1】:

这毕竟是解决方案...

{
  "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 -%}
}

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多