这是一个非常核心的 Hugo 功能。hugo new content 命令生成的文章内容的默认模板头(即 front matter)是在 archetypes(原型)目录中设置的。
核心概念:Archetypes (原型)
你可以把 Archetype 文件想象成一个“蓝图”或“模板”。当你使用 hugo new content <SECTION>/<FILENAME>.md 命令创建一个新的内容文件时,Hugo 会执行以下逻辑:
- 它会去你的项目根目录下的
archetypes文件夹里寻找一个与<SECTION>同名的.md文件。 - 如果找到了(例如
archetypes/posts.md),Hugo 就会使用这个文件的内容作为新创建的content/posts/new-post.md文件的初始内容。 - 如果没有找到特定 section 的原型文件,Hugo 会使用
archetypes/default.md这个文件。 - 如果连
archetypes/default.md都没有,Hugo 会生成一个只包含最基本 front matter 的文件(通常只有title,date, 和draft: true)。
如何设置和修改默认模板
1. 找到或创建 default.md
这是控制所有未指定类型内容(或者说,没有自己专属原型的内容)的全局默认模板。
-
位置:
你的Hugo项目根目录/archetypes/default.md -
如果文件不存在: 你可以自己创建一个。
-
默认内容通常是这样的:
--- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true ---解释一下这些变量:
{{ .Name }}: 这是你创建文件时提供的文件名(不含扩展名)。{{ replace .Name "-" " " | title }}: 这是一个 Hugo 函数链。它会获取文件名,把所有的连字符 (-) 替换成空格,然后将每个单词的首字母大写,生成一个更适合阅读的标题。例如,my-first-post会变成My First Post。{{ .Date }}: 这是文件创建时的当前日期和时间。draft: true: 这是一个非常有用的设置,它将新创建的文章标记为“草稿”。草稿状态的文章在默认情况下不会被构建到最终的网站中(即hugo命令不会处理它)。这可以防止你意外地发布一篇还没写完的文章。当你完成写作后,可以把draft改为false或者直接删除这一行。
2. 创建特定内容类型的模板 (例如 posts)
假设你的网站有一个“博客”部分,内容都放在 content/posts/ 目录下。你可以为所有新的博客文章创建一个专门的模板。
-
位置:
你的Hugo项目根目录/archetypes/posts.md -
操作: 创建这个文件,并填入你希望博客文章拥有的默认 front matter。
-
示例
archetypes/posts.md:--- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} author: "你的名字" # 可以硬编码一个默认作者 tags: [] # 添加一个空的标签数组,方便后续填写 categories: ["技术分享"] # 设置一个默认分类 description: "" # 添加一个空的描述字段 draft: true --- <!-- 在这里开始你的正文 -->
现在,当你运行命令:
-
hugo new content posts/my-awesome-post.md- Hugo 会使用
archetypes/posts.md作为模板。
- Hugo 会使用
-
hugo new content about.md- 由于没有
archetypes/about.md,Hugo 会回退使用archetypes/default.md。
- 由于没有
总结
| 你想做什么 | 操作 |
|---|---|
| 修改所有内容的默认模板 | 编辑或创建 archetypes/default.md 文件。 |
| 为特定内容区(如博客)创建模板 | 在 archetypes/ 目录下创建一个与内容区同名的 Markdown 文件,例如 archetypes/posts.md。 |
| 添加自定义字段 | 直接在你选择的原型文件的 front matter(--- 之间)添加新的键值对,例如 featured: false。 |
这个 Archetypes 功能是 Hugo 自动化和规范化内容创作流程的关键,善用它可以大大提高你的写作效率。
接下来,我们可以探讨以下相关主题:
- 如何在 Hugo 模板中有效地使用
tags和categories(分类法)? - 解释 Hugo 中的
Page Bundles(页面包) 是什么,以及如何组织文章和相关资源(如图片)。 - 如何创建一个自定义的 Shortcode 来在 Markdown 中嵌入复杂的内容?