Nunjucks中如何在指定条目处终止含include的for循环
实现方案
你使用的是Nunjucks模板引擎,默认不支持break语句直接终止循环,可根据需求选择以下两种实现方式:
方法1:使用limit过滤器(推荐,性能最优)
直接在遍历前截取指定数量的文章,不需要进入循环后做额外判断,是最简洁高效的写法:
- 若要遍历到第2篇就终止,将循环首行替换为
{%- for article in collections.article | reverse | limit(2) -%} - 若要遍历到第3篇就终止,将循环首行替换为
{%- for article in collections.article | reverse | limit(3) -%}
修改后的完整代码示例(以渲染前2篇为例):
<div class="container mar2ritlft"> <div class="content3col"> {%- for article in collections.article | reverse | limit(2) -%} {% include 'article-post.njk' %} {%- endfor -%} </div> </div>
方法2:通过loop.index做条件判断(适配复杂终止规则)
如果你的终止逻辑不是固定文章数,比如遇到特定标签/属性的文章才终止,可以用Nunjucks循环自带的loop.index变量(从1开始计数,对应当前遍历到的第几篇文章)做判断,跳过不需要渲染的内容:
<div class="container mar2ritlft"> <div class="content3col"> {%- for article in collections.article | reverse -%} {# 遍历到第3篇终止就把判断值改成3即可 #} {% if loop.index <= 2 %} {% include 'article-post.njk' %} {% endif %} {%- endfor -%} </div> </div>
注意:该方案的循环本身会遍历完所有文章,仅跳过超过阈值内容的渲染,文章总量较大时性能不如limit过滤器方案。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

