Jinja模板渲染YAML结构不符预期,求正确写法
正确的Jinja模板编写方案
目标输出YAML结构
animals: my_pets: - species: name: Buddy age: 3 - species: name: Muffin age: 5
匹配的输入YAML(fixed_input.yaml)
animals: my_pets: - species: name: Buddy age: 3 - species: name: Muffin age: 5
正确的Jinja模板(fixed_template.jinja)
animals: my_pets: {% for pet in animals.my_pets %} - species: name: {{ pet.species.name }} age: {{ pet.species.age }} {% endfor %}
关键说明
- 层级保留:模板开头直接写出
animals和my_pets的层级,确保输出结构和目标完全对齐。 - 列表遍历:用
{% for pet in animals.my_pets %}循环遍历输入中的宠物列表,每个循环生成一个YAML列表项(以-开头)。 - 嵌套字段渲染:通过
pet.species.name和pet.species.age直接访问嵌套字段,同时严格遵循YAML缩进规则(species下的子字段比species:缩进4个空格,列表项的-比my_pets:缩进4个空格)。
如果你的输入YAML是扁平化存储的(比如将物种名称、年龄作为独立字段),可以调整模板适配:
扁平化输入YAML示例
animals: my_pets: - species_name: Buddy species_age: 3 - species_name: Muffin species_age: 5
对应调整后的模板
animals: my_pets: {% for pet in animals.my_pets %} - species: name: {{ pet.species_name }} age: {{ pet.species_age }} {% endfor %}
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

