
在 Liquid 模板中,可通过 {% unless property %} 判断变量是否未传入或为空,从而安全地为其赋默认值;该方式兼容 render 传递的参数,且简洁可靠,但需注意 false、空字符串等 falsy 值会被误判为“未提供”。
在 liquid 模板中,可通过 `{% unless property %}` 判断变量是否未传入或为空,从而安全地为其赋默认值;该方式兼容 `render` 传递的参数,且简洁可靠,但需注意 `false`、空字符串等 falsy 值会被误判为“未提供”。
Liquid 本身不支持类似 Vue 的声明式默认参数语法(如 prop: value || 'default'),但可通过逻辑控制实现等效效果。核心思路是:仅在变量未定义或为 falsy 值时才执行默认赋值,且该判断必须放在模板顶部(在 {{ property }} 渲染前)。
推荐写法如下(以背景配置为例):
{% unless background_image %}
{% assign background_image = "https://cdn.shopify.com/defaults/background-solid-blue.png" %}
{% endunless %}
<div style="
background:
{% if background_image contains 'http' %}
url({{ background_image }}) center/cover no-repeat
{% else %}
{{ background_image }}
{% endif %};
">
<!-- 内容 -->
</div>✅ 正常行为:
- {% render 'example.liquid', background_image: "https://example.com/bg.jpg" %} → 使用传入图片;
- {% render 'example.liquid' %} → 自动回退到默认蓝色背景图;
- {% render 'example.liquid', background_image: "#f0f0f0" %} → 渲染为纯色背景(因不含 http,进入 else 分支)。
⚠️ 注意事项:
- Liquid 中的 falsy 值包括:nil、空字符串 ""、空数组 [];但 false 字面量也会被 unless 视为 falsy,因此若业务需显式传入 false(如禁用背景),此方案不适用;
- 若需支持 false 作为有效值,应改用 {% if property == blank %} 判断(blank 包含 nil 和空字符串,但不包含 false):
{% if background_image == blank %} {% assign background_image = "#ffffff" %} {% endif %} - 所有 assign 必须在使用前完成;Liquid 变量作用域为当前模板层级,render 传入的变量可直接访问,无需额外声明。
总结:unless property 是最常用、最轻量的默认值实现方式,适用于绝大多数场景;如需更高精度的空值判断,请优先选用 == blank。始终在模板开头集中处理默认值逻辑,保持结构清晰、维护性强。

















