首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jinja2 for循环遍历对象列表不会提供首选输出

Jinja2 for循环遍历对象列表不会提供首选输出
EN

Stack Overflow用户
提问于 2021-04-09 20:12:50
回答 2查看 55关注 0票数 0

data.yml结构:

代码语言:javascript
复制
routingConfig:
   accessKeyId: AKIAVL34FWX5KFFSVSCND
   secretAccessKey: IglNnjk/iaR++DnQuNObAnrXsvsd9ZO+gJW5nZDd
   hostedZoneId: Z03431513GGUF3XEAQE5U
   recordSet:
      type: A
      ttl: 60
      resourceIp: 52.41.8.70

用于重新生成yml结构的jinja2模板片段:

代码语言:javascript
复制
routingConfig:
{% for key,value in routingConfig.items() if value.recordSet is not defined %}
{{ key|e }}: {{ value|e }}
{% endfor %}
recordSet:
{% for key,value in routingConfig.items() if value.recordSet is defined %}
{{ key|e }}: {{ value|e }}
{% endfor %}

实际输出:

代码语言:javascript
复制
routingConfig:
  recordSet: {u'type': u'A', u'resourceIp': u'52.71.3.72', 
  accessKeyId: AKIAVL34FWX5KFSTDFDFNCND
  secretAccessKey: IglNnjk/iaR++DnQuNObAnrXRrbfvdfvd9ZO+gJW5nZDd
  hostedZoneId: Z03431513GGUF3XEFBDVAQE5U

预期输出格式:

代码语言:javascript
复制
routingConfig:
   accessKeyId: AKIAVL34FWX5KFFSVSCND
   secretAccessKey: IglNnjk/iaR++DnQuNObAnrXsvsd9ZO+gJW5nZDd
   hostedZoneId: Z03431513GGUF3XEAQE5U
   recordSet:
      type: A
      ttl: 60
      resourceIp: 52.41.8.70

有什么建议可以使输出的结构与预期格式相同吗?

代码语言:javascript
复制
{{ routingConfig | to_yaml(default_flow_style=False) | indent(2) }} 

这给出了下面的yml格式。但是看起来缩进不是很正确

代码语言:javascript
复制
 routingConfig:
 accessKeyId: AKIAVL34FWX5KFDFBSTNCND
    recordSet:
      type: A
      ttl: 60
      resourceIp: 52.41.8.70
    secretAccessKey: IglNnjk/iaR++DnQuNObDFBAnrXsvsd9ZO+gJW5nZDd
    hostedZoneId: Z03431513GGUF3XEADGBDQE5U
EN

回答 2

Stack Overflow用户

发布于 2021-04-09 20:46:45

首先,在YAML模板中使用|e是没有意义的,因为那样做的是HTML转义,而不是YAML转义。请改用|to_yaml。根据您的数据(您没有显示),这可能已经足够了:

代码语言:javascript
复制
routingConfig:
  {{ routingConfig | to_yaml(default_flow_style=False) | indent(2) }}

请注意,如果您想强制特定顺序的键,您将需要单独输出它们:

代码语言:javascript
复制
routingConfig:
  {% set c = routingConfig -%}
  accessKeyId: {{ c.accessKeyId | to_yaml }}
  secretAccessKey: {{ c.secretAccessKey | to_yaml }}
  hostedZoneId: {{ c.hostedZoneId | to_yaml }}
  recordSet:
    {% set r = c.recordSet -%}
    type: {{ r.type | to_yaml }}
    ttl: {{ r.ttl | to_yaml }}
    resourceIp: {{ r.resourceIp | to_yaml }}
票数 4
EN

Stack Overflow用户

发布于 2021-04-09 20:45:48

假设routingConfig已经是一个字典,您是否考虑过在模板中使用to_yaml filter

代码语言:javascript
复制
routingConfig:
    {{ routingConfig | to_yaml | indent }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67020955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档