Jinja模板for循环中如何获取去重后的唯一值?
解决Jinja模板中datalist选项重复的问题
你的问题出在unique过滤器的作用对象上:purchase中的每个元素是一个数组(col),默认unique会对比整个数组对象是否完全一致,而你需要的是**数组第一个元素(col[0])**的去重。即使两个数组的col[0]相同,只要其他元素不同,unique就会把它们当成不同项保留,所以去重无效。
修复方案一:在模板中用map+unique组合处理
先通过map(attribute='0')提取所有col[0]的值,再对这些值去重,最后遍历输出:
<input list="code" code="order" name="code"> <datalist id="code"> {% for value in purchase|map(attribute='0')|unique|list %} <option value="{{value}}"> {% endfor %} </datalist>
map(attribute='0'):从每个col数组中提取索引为0的元素,生成一个只包含目标值的序列unique:对这个序列中的值去重list:将过滤后的序列转为列表(部分Jinja环境可能需要显式转换)
修复方案二:后端提前处理数据
如果数据量较大,更推荐在后端(比如Python代码中)先对purchase的col[0]值去重,再传递给模板:
# 假设是Python后端,示例代码: unique_codes = list({col[0] for col in purchase}) # 用集合去重,再转列表 # 然后将unique_codes传给模板,模板中直接遍历这个列表
模板中就可以简化为:
<input list="code" code="order" name="code"> <datalist id="code"> {% for code in unique_codes %} <option value="{{code}}"> {% endfor %} </datalist>
内容的提问来源于stack exchange,提问作者Jim Macaulay
相关产品推荐
相关产品推荐

