我试图使用jinja2将嵌套字典输出到yaml文件。但是,我不知道如何访问嵌套的dicts。对于数据,我可以使用下面的内容。
- request:
path: {{ path }}
headers:
origin: 'somedomain.com'
user-agent: 'agent'
referer: 'some.domain.com'
authority: 'somedomain.com'
data:
{% for key, value in data.items() -%}
{{ key }}: '{{ value }}'
{%- endfor %}
response:
content:
file: {{ content }}但是,使用下面这样的嵌套dict,如何实现底部的输出?
{'toplevelkey1': {'nestedkey1': 'value1', 'nestedkey2': 123, 'nestedkey3': '55',
'nestedkey4': 1560}, 'toplevelkey34': 'df',
'toplevelkey2': {'somekey12': 68, 'somekey58': False, 'somekey48': 3, 'somekey38': 'ADF',
'somekey39': 'St'}, 'toplevel34': 'T',
'toplevel8': {'key33': 68, 'key94': 3, 'key83': 'T', 'key84': 'dog'}}所需输出
- request:
path: /some/path
headers:
origin: 'somedomain.com'
user-agent: 'agent'
referer: 'somedomain.com'
authority: 'somedomain.com'
data:
toplevelkey1:
nestedkey1: 'value1'
nestedkey2: '123
.... : ....
toplevel34: 'T'
toplevelkey2:
'somekey12': 68
..... : .....
response:
content:
file: address.json发布于 2016-04-26 18:38:06
我将引入一个自定义递归“漂亮打印”过滤器,它将支持任意级别的嵌套:
def pretty(d, indent=10, result=""):
for key, value in d.iteritems():
result += " " * indent + str(key)
if isinstance(value, dict):
result = pretty(value, indent + 2, result + "\n")
else:
result += ": " + str(value) + "\n"
return result
env.filters['pretty'] = pretty并在模板中将其用作:
{{ data|pretty }}发布于 2022-02-12 09:16:59
有一种更小、更通用的解决方案:
# License: public-domain
import yaml # This is pyyaml
def yaml_pretty(d, indent=10):
dump = yaml.dump(d)
res = ""
for line in dump.split("\n"):
res += " " * indent + line + "\n"
return res这将处理所有类型,例如,也(嵌套)列表。
https://stackoverflow.com/questions/36872643
复制相似问题