首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jinja 2套式yaml词典

jinja 2套式yaml词典
EN

Stack Overflow用户
提问于 2016-04-26 18:10:49
回答 2查看 3.8K关注 0票数 3

我试图使用jinja2将嵌套字典输出到yaml文件。但是,我不知道如何访问嵌套的dicts。对于数据,我可以使用下面的内容。

代码语言:javascript
复制
 - 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,如何实现底部的输出?

代码语言:javascript
复制
{'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'}}

所需输出

代码语言:javascript
复制
   - 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-26 18:38:06

我将引入一个自定义递归“漂亮打印”过滤器,它将支持任意级别的嵌套:

代码语言:javascript
复制
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

并在模板中将其用作:

代码语言:javascript
复制
{{ data|pretty }}
票数 5
EN

Stack Overflow用户

发布于 2022-02-12 09:16:59

有一种更小、更通用的解决方案:

代码语言:javascript
复制
# 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

这将处理所有类型,例如,也(嵌套)列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36872643

复制
相关文章

相似问题

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