如何在Liquid的unless语句中匹配多个模板?现有代码仅单模板生效
解决Liquid模板多名称匹配问题
你之前的写法存在逻辑或语法错误,导致只有templatename1生效:
unless块里用and是逻辑错误:template == "templatename1" and "templatename2"实际是判断template等于第一个模板并且非空字符串templatename2为真(Liquid里非空字符串默认是true),等价于只判断template == "templatename1",自然templatename2不生效。if块里用逗号分隔条件是语法错误,Liquid不支持这种写法,只会解析第一个条件。
以下是正确的写法:
匹配多个模板(if场景)
方法1:用or连接多个相等判断
适合模板数量较少的场景:
{% if template == "templatename1" or template == "templatename2" %} <!-- 匹配到任意一个目标模板时执行的内容 --> {% endif %}
方法2:数组+contains判断
适合需要匹配多个模板的场景,后续新增模板只需修改数组内容:
{% assign target_templates = "templatename1,templatename2" | split: "," %} {% if target_templates contains template %} <!-- 匹配到任意目标模板时执行的内容 --> {% endif %}
排除多个模板(unless场景)
方法1:用or连接排除条件
{% unless template == "templatename1" or template == "templatename2" %} <!-- 模板既不是templatename1也不是templatename2时执行的内容 --> {% endunless %}
方法2:数组+contains判断
{% assign exclude_templates = "templatename1,templatename2" | split: "," %} {% unless exclude_templates contains template %} <!-- 模板不在排除列表里时执行的内容 --> {% endunless %}
内容的提问来源于stack exchange,提问作者Adnan Malik
相关产品推荐
相关产品推荐

