You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:34:55