如何在Liquid循环中嵌套循环?代码突发故障求排查
排查Liquid嵌套循环失效问题
首先明确:当前内层循环的输出元素数量不一定和首次运行一致,以下是具体排查步骤:
1. 验证分类数据源是否变化
你的代码从site.data.list_of_sections_with_categories.yagodnye-kultury获取分类列表,这是最可能的变量点:
- 检查对应的数据文件(通常在
_data目录下),确认yagodnye-kultury数组的元素数量、拼写是否和首次运行时一致,有没有被删除、新增或修改。 - 临时在代码开头加调试输出:
{{ category_names | inspect }},直接查看当前加载的分类列表内容,对比首次运行的预期值。
2. 确认目标文章集合是否变化
外层循环使用site.posts limit:3取最新3篇文章,次日可能有新文章发布,替换了原来的3篇:
- 如果新文章的
categories和category_names中的分类无匹配,会直接导致输出减少甚至为空。 - 可以临时把外层循环改成固定文章测试,比如:
用已知分类匹配的文章测试,看是否能正常输出,排除新文章的影响。{%- assign test_posts = site.posts | where: "slug", "你的测试文章slug" %} {%- for post in test_posts %}
3. 检查文章分类的格式匹配
Liquid的contains逻辑对数组和字符串的处理不同,需确认:
post.categories是数组还是单个字符串?如果是数组,contains检查元素是否存在;如果是字符串,contains检查子串是否匹配。- 临时在内层循环加调试:
{{ post.title }} - {{ post.categories | inspect }},查看每篇文章的分类实际值,确认是否和category_names中的元素完全匹配(注意大小写、空格、特殊字符)。
4. 排查引入模板的问题
即使循环匹配成功,如果/second-section-item-1-test.html模板出现问题,也会导致无输出:
- 检查模板文件是否被删除、修改,或者模板内的逻辑(比如变量引用错误)导致内容无法渲染。
- 可以临时把
include替换成简单输出,比如{{ post.title }} 匹配成功,看是否能正常显示,确认是模板问题还是循环匹配问题。
内容的提问来源于stack exchange,提问作者Dnevnik Ogorodnika
相关产品推荐
相关产品推荐

