Jekyll Liquid含or的if条件判断异常:单条件成立却整体为假
问题分析与解决
Liquid 中的 or 逻辑和常规编程语言完全一致——只要任一条件为真,整个表达式就会返回真,不存在特殊的工作机制。你遇到的问题不是 or 的问题,而是代码本身存在隐性错误,以下是具体排查方向:
1. 未定义变量 elem 的干扰
第二个 if 的第一个子条件是 elem == key and item == id,但代码中从未对 elem 变量赋值。在 Liquid 中,未定义的变量会被视为空字符串,所以如果 key 不是空字符串,这个子条件必然返回 false。不过这本来不影响第二个子条件生效,除非你在实际代码中误写了第二个子条件。
2. 第二个 if 的子条件存在隐性错误
虽然你贴的代码中第二个 if 的第二个子条件和第一个 if 完全一致,但实际运行时可能存在以下问题:
- 变量名拼写笔误:比如实际代码中把
item.key写成了elem.key,或者把item.id写成了其他变量,导致条件不成立。 - 类型不匹配:比如
key或id的类型发生了变化(比如第一个if中key是字符串"example",但后续代码中被修改为数字),导致item.key == key不成立。
3. 输出标签的混淆
你代码中第一个 if 的 else 分支输出的是 If-2 False,和第二个 if 的 else 分支输出内容完全相同,很可能你混淆了不同循环迭代的输出,把其他非对象元素的输出当成了同一元素的结果。
调试建议
在两个 if 语句之间添加调试输出,打印变量的实际值:
{{ item | inspect }} {{ key | inspect }} {{ id | inspect }} {{ elem | inspect }}
通过查看这些值,就能明确判断第二个 if 的条件为什么没有生效。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

