每日整理真实提问 356 个问题 · 726 个回答 需要系统性的技术文档?看 Shopify 技术百科 1000 篇 → 400-873-8117
已解决 提问于 2 个月前

Liquid 报 for tag was never closed,行号却指在文件中间

3 个回答 2,459 次浏览 主题与 Liquid 最后活跃 2 个月前
17

改完 product-card snippet 后商品列表整段变空白,保存时报 Liquid syntax error: for tag was never closed,但它指的行号落在一个 {% if %} 里面,看不出到底哪一层没闭合。

陈
陈工提问者
Shopify 认证开发者 · 专注主题与 Liquid
2 个月前提问 · 已收到 3 个回答

3 个回答

已采纳 · 提问者确认解决
77

先把判断放在前面:Liquid 解析器是从最内层开始回退配对的,报出的行号是它放弃解析的位置,不是真正的出错点;注释块里残留的结束标签也会让配对整体错位。

1处理顺序

  1. 把 {% comment %} 和 {% raw %} 里被注释掉的旧循环整段删掉——Liquid 不解析注释内容,但标签配对照样计算,少一个 {% endfor %} 就会连带后面全部错位。
  2. 在编辑器里按缩进折叠,依次检查 for / if / case / form 四类标签的结束标签是否齐全,重点是嵌套两层以上的地方。
  3. 把多行 {% liquid %} 写法替换掉散落的单行标签,一个逻辑块内只用一个 {% liquid %},漏写的情况肉眼可见。
  4. 本地执行 shopify theme check,Liquid 语法类错误会精确到具体标签层级,比后台报错可靠。
  5. 改完先在主题编辑器的预览里刷新商品列表,再保存,避免把语法错误发布到线上。
验收:保存不再报错,商品列表恢复渲染,theme check 的 Liquid 类错误归零。
风 风格技术团队 回答于 2 个月前
12

再补一个定位技巧:二分注释。把 snippet 后半段用 {% comment %} 包起来,错误消失说明问题在后半段,再折半,四五轮就能锁到那几行,比按行号猜快得多。

泽 阿泽 · 前端工程师 · 2 个月前
0 赞

确实是 {% comment %} 里留了一个 {% endfor %},删掉立刻好了。行号真的完全没参考价值。

陈 陈工 · 提问者 · 2 个月前

你的处理方式是什么?

写下你实际验证过的步骤,比「我也有这个问题」有用得多。当前版本为静态展示,提交后会由团队整理并回复。

描述你遇到的现象、店铺环境(主题 / 套餐 / 应用)、已经试过哪些操作……
我要单独提问 工作日 10 分钟内回复,可直接加微信 fenggejishu