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

11ty站点布局链中base.njk前置元数据显示异常问题

问题:11ty + Nunjucks布局链中,基础模板的Front Matter被原样渲染显示

原因分析

这是11ty对模板文件的处理规则导致的:

  • 当一个模板文件被内容文件(比如你的page.html)直接通过layout字段指定为布局时(比如你的layer.njk),11ty会自动解析它的Front Matter,不会把这些内容输出到页面上。
  • 但如果是被Nunjucks的{% extends %}指令继承的基础模板(比如你的base.njk),11ty不会把它当作“布局文件”来处理Front Matter——它只会把这个文件当作普通的Nunjucks模板内容来渲染,所以Front Matter的---分隔符和属性声明会被当成纯文本直接输出到浏览器里。

解决方法

你需要换一种方式定义全局常量,而不是在被继承的基础模板里写Front Matter,这里有两种常用方案:

方案1:在基础模板里用Nunjucks的{% set %}定义全局变量

直接修改base.njk,去掉Front Matter,改用Nunjucks的变量声明:

{% set test1 = "hello" %}
<!doctype html>
HTML GOES HERE

这样test1会作为全局变量被所有继承这个模板的子模板(包括layer.njk和page.html)访问到。

方案2:用11ty的全局数据文件定义

如果你的全局常量需要在整个站点的所有页面/模板中使用,更推荐这种方式:
在项目根目录创建_data文件夹,然后在里面新建globals.json文件,内容如下:

{
  "test1": "hello"
}

11ty会自动加载这个文件里的数据,所有页面和模板都可以直接通过{{ test1 }}访问这个变量,完全不需要在base.njk里做任何声明。

验证修改效果

修改后,你的page.html依然可以正常调用{{test1}}和{{test2}},而且base.njk的Front Matter内容不会再出现在页面中,模板渲染完全正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:16:35