疑问:Twig的for循环为何自动添加空格?技术咨询
为什么Twig for循环输出会自动添加空格?
嘿,这个问题其实很好理解——Twig默认会保留模板里的所有空白字符(空格、换行、制表符这些),你看到的每个数字后面的空格,其实都是你写在模板代码里的空格哦!
咱们来看你的代码:
{% for number in numberlist %} {{number}} {% if loop.last == false %}, {% else %}.{% endif %} {% endfor %}
仔细拆解一下:
{% for %}标签后面有一个空格,紧接着{{number}}的前后又各有一个空格{% if %}标签前后也留了空格,逗号后面还特意写了一个空格,
这些模板里的空白都会被Twig原封不动地输出到最终结果里,所以就出现了每个数字后面都带空格的情况。
给你几个解决办法,按需选就行:
1. 清理模板中的多余空白
把代码写紧凑点,去掉那些不必要的空格:
{% for number in numberlist %}{{ number }}{% if not loop.last %}, {% else %}.{% endif %}{% endfor %}
这样输出就会变成120, 121, 122...133.,只有逗号后面保留了你想要的一个空格。
2. 使用spaceless标签移除空白
如果你不想改代码格式(想保持可读性),可以用Twig的spaceless标签包裹整个循环块,它会自动移除块内的多余空白:
{% spaceless %} {% for number in numberlist %} {{number}} {% if loop.last == false %}, {% else %}.{% endif %} {% endfor %} {% endspaceless %}
这个方法会保留你特意写的, 里的空格,去掉其他多余的空白,输出结果同样干净。
3. 用join过滤器更优雅地实现
其实这种“数组转成带分隔符的字符串”需求,Twig早就有现成的join过滤器了,一行代码就能搞定,完全不用写循环:
{{ numberlist|join(', ') ~ '.' }}
join(', ')会把数组元素用, 连接起来,再用~ '.'在末尾加个句号,输出结果完美符合你的需求,代码还更简洁!
内容的提问来源于stack exchange,提问作者Dassef
相关产品推荐
相关产品推荐

