Jinja2模板多map操作异常求助:提取units中name值失败
问题分析与解决
你的错误出在没有先扁平化嵌套的units列表:
- 第一步
a.values() | list得到的是包含两个字典的列表:[{"name": "val1", "units": [...]}, {"name": "val2", "units": [...]}] - 经过
map(attribute='units')后,得到的是两个独立的列表:[[{name: item1}, {name: item2}], [{name: xyz}, {name: mno}]] - 此时再用
map(attribute='name'),是尝试给这两个列表对象取name属性——列表本身没有这个属性,所以返回Undefined。
修正后的代码
只需要在提取units之后,加入flatten过滤器把嵌套列表展开,再提取name:
{% set a = { "val1": { "name": "val1", "units": [ {"name": "item1", "size": 45}, {"name": "item2", "size": 36} ] }, "val2": { "name": "val2", "units": [ {"name": "xyz", "size": 45}, {"name": "mno", "size": 36} ] } } %} {% set check = a.values() | list | map(attribute='units') | flatten | map(attribute='name') | list %} {{ check }}
执行流程拆解
a.values() | list:获取字典中所有值,转为列表map(attribute='units'):提取每个值的units字段,得到嵌套的列表集合flatten:把嵌套列表展开为一维列表,此时内容是所有的unit字典map(attribute='name'):遍历每个unit字典,提取name属性list:最终转为列表,得到预期的["item1", "item2", "xyz", "mno"]
内容的提问来源于stack exchange,提问作者Slayer
相关产品推荐
相关产品推荐

