Jinja2中unique过滤器无法应用于拼接列表的问题排查
解决Jinja2中列表拼接后去重失效的问题
你遇到的问题是Jinja2运算符优先级导致的:过滤器|的优先级高于列表加法+,所以你的模板代码{{ this + that | unique | list }}实际执行顺序是:
- 先对
that列表执行unique去重,得到['one', 'two'] - 再和原
this列表['one', 'one']拼接,最终得到['one', 'one', 'one', 'two'],这就是去重未生效的原因。
解决方法很简单,用括号把列表拼接操作包裹起来,强制让拼接先执行,再对合并后的整个列表去重:
{{ (this + that) | unique | list }}
用你的测试数据验证,这个模板会输出预期的去重结果:
['one', 'two']
补充说明:单独对单个列表使用unique能正常去重,是因为没有运算符优先级冲突,过滤器直接作用于整个列表。
内容的提问来源于stack exchange,提问作者Justin Palmer
相关产品推荐
相关产品推荐

