把内容和展示分离

传统博客的管理方式:改首页文案 → 打开 index.html → 在 Go Template 中寻找文字 → 修改 → 构建 → 检查。

如果不小心删了一个 </div>,整个页面崩溃。

幻梦的做法:所有页面内容放到 data/theme.yaml,模板只负责展示逻辑。

Hugo 的数据文件机制

Hugo 会自动加载 data/ 目录下的 YAML/JSON/TOML 文件,通过 .Site.Data 访问:

data/
└── theme.yaml     →  .Site.Data.theme

站点目录的 data/ 会自动覆盖主题目录的同名文件。这正是幻梦的定制策略:

themes/illusion/data/theme.yaml   ← 默认值
data/theme.yaml                    ← 你的定制(覆盖默认)

模板中的访问

<h1>{{ hugo.Data.theme.home.hero.title }}</h1>
<p>{{ hugo.Data.theme.home.hero.description }}</p>

{{ range hugo.Data.theme.home.hero.subtitles }}
  <span>{{ . }}</span>
{{ end }}

模板永远不包含具体的文字内容,只引用数据路径。

为什么放在一个文件里?

最初幻梦有 9 个独立的 YAML 文件(home.yamlabout.yamlskills.yaml……)。但管理 9 个文件比重写模板好不到哪里去。

合并为一个 theme.yaml 后,一个文件就能看到全站配置。Ctrl+F 就能找到任何需要修改的内容。

对非开发者的友好

某一天,你想把博客交给一个不懂代码的朋友维护。你需要教他的只有一句话:

“打开 data/theme.yaml,改里面的文字就行。”

不需要解释 Go Template、不需要碰 HTML。改 YAML → Hugo 重新构建 → 网站更新。

未来可能的方向

YAML 驱动的内容管理有其极限。当博客有 100+ 篇文章时,前端编辑的需求会出现。但在这个规模之前,一个 YAML 文件比任何 CMS 都更简单、更可靠。


最好的内容管理系统,有时候就是一个文本文件。