如何在Jinja2中拼接列表中的所有子列表?
在Jinja2中拼接列表子列表的解决方案
Jinja2的sum过滤器和Python内置的sum函数功能不一样——它专门用于计算数值的总和,会尝试将每个元素转为数值类型,所以直接用sum(lofl, [])或者lofl|sum([])没法实现列表拼接,这也是你之前写法无效的原因。
你可以用以下两种方法实现需求:
方法一:自定义扁平化过滤器
在后端代码中注册一个自定义过滤器,用来递归扁平化列表:
from jinja2 import Environment def flatten_nested_list(lst): flattened = [] for element in lst: if isinstance(element, list): flattened.extend(flatten_nested_list(element)) else: flattened.append(element) return flattened # 注册过滤器到Jinja2环境 env = Environment() env.filters['flatten'] = flatten_nested_list
之后在模板中直接使用过滤器:
{{ lofl|flatten }}
这种方法适合需要多次使用扁平化操作的场景,代码更简洁。
方法二:用模板循环拼接
如果不想自定义过滤器,也可以直接在模板里通过循环实现:
{% set flattened_list = [] %} {% for sublist in lofl %} {% for item in sublist %} {% set _ = flattened_list.append(item) %} {% endfor %} {% endfor %} {{ flattened_list }}
这里利用set _ = ...来捕获append方法的返回值(append返回None,但Jinja2允许这种写法来执行列表操作),最终得到拼接后的扁平化列表。
内容的提问来源于stack exchange,提问作者Xaver
相关产品推荐
相关产品推荐

