You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nunjucks中判断字符串及front matter字段是否为空

Nunjucks 判空功能实现方案

Nunjucks 没有原生内置等同于 JavaScript 中 isEmpty() 的通用判空方法,你可以通过原生语法直接实现常用场景判空,也可以在 Eleventy 中自定义过滤器实现全场景通用判空,具体方法如下:

方案1:使用 Nunjucks 原生语法实现常用场景判空

不需要额外配置,直接在模板中编写判断逻辑即可覆盖绝大多数日常需求:

  • 普通字符串判空(覆盖undefined、null、空字符串、全空白字符串场景)
    写法:{% if targetStr and targetStr.trim() %}
    示例:
    {% if title and title.trim() %}
      <h1>{{ title }}</h1>
    {% else %}
      <h1>默认标题</h1>
    {% endif %}
    
  • Front matter 字段判空
    写法和普通字符串一致,直接引用front matter中声明的字段即可:
    {% if description and description | trim %}
      <meta name="description" content="{{ description }}">
    {% endif %}
    
  • 数组判空
    写法:{% if targetArr and targetArr.length %}
  • 数值/布尔值判空(需要保留0、false为有效值的场景)
    写法:{% if targetVal !== undefined and targetVal !== null %}

方案2:Eleventy 中自定义全场景通用 isEmpty 过滤器

如果需要统一的判空逻辑,推荐在Eleventy配置中添加自定义过滤器,适配所有数据类型:

  1. 打开项目根目录下的 .eleventy.js 配置文件,添加如下代码:
module.exports = function(eleventyConfig) {
  // 其他已有配置保持不变
  eleventyConfig.addFilter('isEmpty', function(value) {
    // 处理 null 和 undefined
    if (value == null) return true
    // 处理字符串(自动忽略首尾空白)
    if (typeof value === 'string') return value.trim().length === 0
    // 处理数组
    if (Array.isArray(value)) return value.length === 0
    // 处理普通对象
    if (typeof value === 'object') return Object.keys(value).length === 0
    // 其他类型(数字、布尔值等)默认非空
    return false
  })
}
  1. 在Nunjucks模板中直接使用过滤器:
{% if yourField | isEmpty %}
  <p>字段为空</p>
{% else %}
  <p>{{ yourField }}</p>
{% endif %}

<!-- 取反判断非空 -->
{% if not (yourField | isEmpty) %}
  <p>字段非空</p>
{% endif %}

注意事项

Nunjucks 原生 if 判断存在隐式真值转换,0、false、空字符串、null、undefined 都会被判定为假值,如果你的业务场景中需要将0、false判定为有效值,使用自定义过滤器调整逻辑即可。

内容的提问来源于stack exchange,提问作者kuwts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:57:03