【问题标题】:jinja2 printing key from dict_keys来自dict_keys的jinja2打印密钥
【发布时间】:2021-08-13 03:19:33
【问题描述】:

我正在使用 jinja 模板来打印字典的键。

代码如下:

from jinja2 import Template
import json

data = '''
hello {{Names}}
   Heading is {{ Names.keys() }}
'''

schema = '''
{
   "Names" : [
     "Name1",
     "Name2",
     "Name3"
 ]
}
'''

k = json.loads(schema)

tm = Template(data)
jdata = tm.render(Names=k)
print(jdata)

它打印模板为dict_keys,见下面的输出:

hello {'Names': ['Name1', 'Name2', 'Name3']}
   Heading is dict_keys(['Names'])

所以,我认为dict_keys 是不支持索引的set 类型,而且我无法使用list 方法(通常在python 中使用)将其转换为列表然后使用索引.

我想把它打印成一个字符串,预期的输出:

hello {'Names': ['Name1', 'Name2', 'Name3']}
       Heading is Names  # see the Names, it is string

【问题讨论】:

  • 什么是名称有多个键?
  • 你期待什么结果?我不完全清楚你想要的输出是什么。

标签: python python-3.x dictionary jinja2


【解决方案1】:

如果你想要以下结果:

hello {'Names': ['Name1', 'Name2', 'Name3']}
   Heading is ['Name1', 'Name2', 'Name3']

您可以从 Jinja 模板中访问数组的 Names 内容:

data = '''
hello {{Names}}
   Heading is {{ Names["Names"] }}
'''

如果你不想要括号:

hello {'Names': ['Name1', 'Name2', 'Name3']}
   Heading is Name1, Name2, Name3

只需使用分隔符加入列表项,例如", ":

data = '''
hello {{Names}}
   Heading is {{ ", ".join(Names["Names"]) }}
'''

【讨论】:

  • 但我需要在标题行中从我的模式中打印“名称”(顶级键),请参阅我的预期输出,并且可能是模式可以包含多个键的情况,因此索引是需要。
  • 那样的话,我想@azro 已经给你答案了。
  • 是的,但@azro 的回答也是加入功能,它会被多个键破坏。所以寻找索引。
  • 您能否提供一个包含多个键的示例架构?不幸的是,我不确定我是否理解正确:)
【解决方案2】:

例如,您可以使用",".join() 来打印密钥

data = '''
hello {{Names}}
   Heading is {{ ",".join(Names.keys()) }}
'''

这给了

from jinja2 import Template

data = '''
hello {{Names}}
   Heading is {{ ",".join(Names.keys()) }}
'''
k = {'Names': ['Name1', 'Name2', 'Name3'], 'other_key': 5}
tm = Template(data)
jdata = tm.render(Names=k)
print(jdata)
hello {'Names': ['Name1', 'Name2', 'Name3'], 'other_key': 5}
   Heading is Names,other_key

【讨论】:

  • 感谢您的回答,但是是的,我担心其他键,这就是寻找索引的原因。如果 jinja 模板中有任何内置方法可以像通常在 python 中那样将集合转换为列表,这可能会有所帮助。
猜你喜欢
  • 2015-08-07
  • 2020-07-13
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
相关资源
最近更新 更多