data.yml结构:
routingConfig:
accessKeyId: AKIAVL34FWX5KFFSVSCND
secretAccessKey: IglNnjk/iaR++DnQuNObAnrXsvsd9ZO+gJW5nZDd
hostedZoneId: Z03431513GGUF3XEAQE5U
recordSet:
type: A
ttl: 60
resourceIp: 52.41.8.70用于重新生成yml结构的jinja2模板片段:
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 %}实际输出:
routingConfig:
recordSet: {u'type': u'A', u'resourceIp': u'52.71.3.72',
accessKeyId: AKIAVL34FWX5KFSTDFDFNCND
secretAccessKey: IglNnjk/iaR++DnQuNObAnrXRrbfvdfvd9ZO+gJW5nZDd
hostedZoneId: Z03431513GGUF3XEFBDVAQE5U预期输出格式:
routingConfig:
accessKeyId: AKIAVL34FWX5KFFSVSCND
secretAccessKey: IglNnjk/iaR++DnQuNObAnrXsvsd9ZO+gJW5nZDd
hostedZoneId: Z03431513GGUF3XEAQE5U
recordSet:
type: A
ttl: 60
resourceIp: 52.41.8.70有什么建议可以使输出的结构与预期格式相同吗?
{{ routingConfig | to_yaml(default_flow_style=False) | indent(2) }} 这给出了下面的yml格式。但是看起来缩进不是很正确
routingConfig:
accessKeyId: AKIAVL34FWX5KFDFBSTNCND
recordSet:
type: A
ttl: 60
resourceIp: 52.41.8.70
secretAccessKey: IglNnjk/iaR++DnQuNObDFBAnrXsvsd9ZO+gJW5nZDd
hostedZoneId: Z03431513GGUF3XEADGBDQE5U发布于 2021-04-09 20:46:45
首先,在YAML模板中使用|e是没有意义的,因为那样做的是HTML转义,而不是YAML转义。请改用|to_yaml。根据您的数据(您没有显示),这可能已经足够了:
routingConfig:
{{ routingConfig | to_yaml(default_flow_style=False) | indent(2) }}请注意,如果您想强制特定顺序的键,您将需要单独输出它们:
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 }}发布于 2021-04-09 20:45:48
假设routingConfig已经是一个字典,您是否考虑过在模板中使用to_yaml filter
routingConfig:
{{ routingConfig | to_yaml | indent }}https://stackoverflow.com/questions/67020955
复制相似问题