Jinja2循环中如何在HTML标签属性中拼接数据?
解决Jinja2中拼接数组属性到HTML属性的问题
嘿,作为Jinja2新手遇到这种模板语法问题太正常啦~你之前的写法主要是把模板循环逻辑和表达式语法混在一起了,其实Jinja2有内置的过滤器可以轻松搞定这个需求,不用手动写循环判断!
推荐的简洁写法
直接用map和join两个过滤器组合就能实现:
<div starts="{{ result | map(attribute='start') | join('|') }}"></div>
解释一下这两个过滤器的作用:
map(attribute='start'):遍历result数组里的每个对象,提取出它们的start属性,生成一个新的序列[0, 5]join('|'):把这个序列里的元素用|符号连接起来,最终得到字符串"0|5"
如果你想用循环实现(不推荐,仅作参考)
如果一定要手动写循环拼接,需要先定义一个临时变量来存储拼接的内容,Jinja2里修改列表需要用append配合set:
{% set starts_str_parts = [] %} {% for res in result %} {% if starts_str_parts %} {% set _ = starts_str_parts.append('|') %} {% endif %} {% set _ = starts_str_parts.append(res.start | string) %} {% endfor %} <div starts="{{ starts_str_parts | join }}"></div>
这里用starts_str_parts列表来收集拼接的片段,每次循环判断如果不是第一个元素就先加|,再把start转成字符串加进去,最后用join把列表拼成完整字符串。
内容的提问来源于stack exchange,提问作者bitwikinger
相关产品推荐
相关产品推荐

