Front matter (前置 matter)
概述
每个内容文件顶部的 front matter 是元数据,它:
- 描述内容
- 增强内容
- 建立与其他内容的关系
- 控制网站的发布结构
- 确定模板选择
使用序列化格式提供 front matter,可以选择 JSON、TOML 或 YAML。Hugo 通过检查分隔 front matter 和页面内容的分隔符来确定 front matter 的格式。
通过在下面的序列化格式之间切换,查看 front matter 分隔符的示例。
---
date: 2024-02-02T04:14:54-08:00
draft: false
params:
author: John Smith
title: Example
weight: 10
---+++
date = 2024-02-02T04:14:54-08:00
draft = false
title = 'Example'
weight = 10
[params]
author = 'John Smith'
+++{
"date": "2024-02-02T04:14:54-08:00",
"draft": false,
"params": {
"author": "John Smith"
},
"title": "Example",
"weight": 10
}
front matter 字段可以是 布尔值 、 整数 、 浮点数 、 字符串 、 数组 或 映射 。请注意,TOML 格式还支持未加引号的日期/时间值。
字段
最常见的 front matter 字段是 date 、 draft 、 title 和 weight ,但您可以使用以下任何字段指定元数据。
别名
(字符串数组) 一个或多个别名的数组,其中每个别名都是一个相对 URL,它将把浏览器重定向到当前位置。使用 Page 对象上的 Aliases 方法从模板访问这些值。有关详细信息,请参阅 别名 部分。
构建
(映射) 构建选项 的映射。
级联
(映射) front matter 键的映射,其值传递给页面的子代,除非被自身或更近的祖先的级联覆盖。有关详细信息,请参阅 级联 部分。
日期
(字符串) 与页面关联的日期,通常是创建日期。请注意,TOML 格式还支持未加引号的日期/时间值。有关示例,请参阅 日期 部分。使用 Page 对象上的 Date 方法从模板访问此值。
描述
(字符串) 从概念上不同于页面 summary ,描述通常在已发布 HTML 文件的 head 元素内的 meta 元素中呈现。使用 Page 对象上的 Description 方法从模板访问此值。
草稿
(布尔值)
如果为 true ,除非您将 --buildDrafts 标志传递给 hugo 命令,否则不会呈现该页面。使用 Page 对象上的 Draft 方法从模板访问此值。
过期日期
(字符串) 页面的过期日期。在过期日期或之后,除非您将 --buildExpired 标志传递给 hugo 命令,否则不会呈现该页面。请注意,TOML 格式还支持未加引号的日期/时间值。有关示例,请参阅 日期 部分。使用 Page 对象上的 ExpiryDate 方法从模板访问此值。
无头
(布尔值) 适用于 叶子包 ,如果为 true ,则此值将 render 和 list 构建选项 设置为 never ,从而创建 页面资源 的无头包。
是否 CJK 语言
(布尔值) 如果内容语言属于 CJK 族,则设置为 true 。此值决定 Hugo 如何计算字数,并影响 Page 对象上的 WordCount、FuzzyWordCount、ReadingTime 和 Summary 方法返回的值。
关键词
(字符串数组) 关键词数组,通常在已发布 HTML 文件的 head 元素内的 meta 元素中呈现,或用作 分类法 来对内容进行分类。使用 Page 对象上的 Keywords 方法从模板访问这些值。
最后修改时间
(字符串) 页面上次修改的日期。请注意,TOML 格式还支持未加引号的日期/时间值。有关示例,请参阅 日期 部分。使用 Page 对象上的 Lastmod 方法从模板访问此值。
布局
(字符串) 提供模板名称以 定位特定模板 ,覆盖默认的 模板查找顺序 。将值设置为模板的基本文件名,不包括其扩展名。使用 Page 对象上的 Layout 方法从模板访问此值。
链接标题
(字符串) 通常是 title 的较短版本。使用 Page 对象上的 LinkTitle 方法从模板访问此值。
标记
(字符串) 与受支持的 内容格式 之一相对应的标识符。如果未提供,Hugo 会根据文件扩展名确定内容渲染器。
菜单
(字符串 、 字符串数组 或 映射) 如果设置,Hugo 会将页面添加到给定的菜单或菜单中。有关详细信息,请参阅 菜单 页面。
修改时间
lastmod 的别名。
输出
(字符串数组) 要呈现的 输出格式 。
参数
New in v0.123.0(映射) 自定义 页面参数 的映射。
发布日期
publishDate 的别名。
发布日期
(字符串) 页面的发布时间。在发布时间之前,除非您将 --buildFuture 标志传递给 hugo 命令,否则不会呈现该页面。请注意,TOML 格式还支持未加引号的日期/时间值。有关示例,请参阅 日期 部分。使用 Page 对象上的 PublishDate 方法从模板访问此值。
已发布
publishDate 的别名。
资源
(映射数组) 映射数组,用于提供 页面资源 的元数据。
站点地图
(映射) 站点地图选项的映射。有关详细信息,请参阅 站点地图模板 页面。使用 Page 对象上的 Sitemap 方法从模板访问这些值。
标识
(字符串) 覆盖 URL 路径的最后一部分。不适用于章节页面。有关详细信息,请参阅 URL 管理 页面。使用 Page 对象上的 Slug 方法从模板访问此值。
摘要
(字符串) 从概念上不同于页面 description ,摘要要么总结内容,要么作为预告来鼓励读者访问页面。使用 Page 对象上的 Summary 方法从模板访问此值。
标题
(字符串) 页面标题。使用 Page 对象上的 Title 方法从模板访问此值。
翻译键
(字符串) 用于关联同一页面的两个或多个翻译的任意值,在翻译页面没有共享公共路径时非常有用。使用 Page 对象上的 TranslationKey 方法从模板访问此值。
类型
(字符串) 内容类型 ,覆盖从页面所在的顶级部分派生的值。使用 Page 对象上的 Type 方法从模板访问此值。
取消发布日期
expirydate 的别名。
url
(字符串) 覆盖整个 URL 路径。适用于常规页面和章节页面。有关详细信息,请参阅 URL 管理 页面。
权重
(整数) 页面的 权重 ,用于在 页面集合 中对页面进行排序。使用 Page 对象上的 Weight 方法从模板访问此值。
参数
New in v0.123.0在 front matter 中的 params 键下指定自定义页面参数:
---
date: 2024-02-02T04:14:54-08:00
draft: false
params:
author: John Smith
title: Example
weight: 10
---+++
date = 2024-02-02T04:14:54-08:00
draft = false
title = 'Example'
weight = 10
[params]
author = 'John Smith'
+++{
"date": "2024-02-02T04:14:54-08:00",
"draft": false,
"params": {
"author": "John Smith"
},
"title": "Example",
"weight": 10
}
使用 Page 对象上的 Params 或 Param 方法从模板访问这些值。
Hugo 提供 嵌入式模板 可选地在渲染页面的 head 元素中插入元数据。这些嵌入式模板需要以下 front matter 参数:
| 参数 | 数据类型 | 用于以下嵌入式模板 |
|---|---|---|
audio |
[]string |
opengraph.html |
images |
[]string |
opengraph.html , schema.html , twitter_cards.html |
videos |
[]string |
opengraph.html |
如果 front matter 中未提供参数,嵌入式模板将跳过该参数,但如果数据类型意外,则会引发错误。
分类法
通过向 front matter 添加分类术语来对内容进行分类。例如,使用此站点配置:
taxonomies:
genre: genres
tag: tags
[taxonomies]
genre = 'genres'
tag = 'tags'
{
"taxonomies": {
"genre": "genres",
"tag": "tags"
}
}
按如下所示添加分类术语:
---
date: 2024-02-02T04:14:54-08:00
draft: false
genres:
- mystery
- romance
params:
author: John Smith
tags:
- red
- blue
title: Example
weight: 10
---+++
date = 2024-02-02T04:14:54-08:00
draft = false
genres = ['mystery', 'romance']
tags = ['red', 'blue']
title = 'Example'
weight = 10
[params]
author = 'John Smith'
+++{
"date": "2024-02-02T04:14:54-08:00",
"draft": false,
"genres": [
"mystery",
"romance"
],
"params": {
"author": "John Smith"
},
"tags": [
"red",
"blue"
],
"title": "Example",
"weight": 10
}
您可以将分类术语添加到任何这些 [页面类型] 的 front matter 中:
homepagesectiontaxonomyterm
使用 Page 对象上的 Params 或 GetTerms 方法从模板访问分类术语。例如:
{{ with .GetTerms "tags" }}
<p>标签</p>
<ul>
{{ range . }}
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
{{ end }}
</ul>
{{ end }}级联
任何 节点 都可以将其 front matter 值集传递给其子代。
定位特定页面
cascade 块可以是一个数组,其中包含可选的 _target 关键字,允许您在级联值时定位不同的页面集。
---
cascade:
- _target:
kind: page
lang: en
path: /articles/
params:
background: yosemite.jpg
- _target:
kind: section
params:
background: goldenbridge.jpg
title: 主页
---+++
title = '主页'
[[cascade]]
[cascade._target]
kind = 'page'
lang = 'en'
path = '/articles/'
[cascade.params]
background = 'yosemite.jpg'
[[cascade]]
[cascade._target]
kind = 'section'
[cascade.params]
background = 'goldenbridge.jpg'
+++{
"cascade": [
{
"_target": {
"kind": "page",
"lang": "en",
"path": "/articles/"
},
"params": {
"background": "yosemite.jpg"
}
},
{
"_target": {
"kind": "section"
},
"params": {
"background": "goldenbridge.jpg"
}
}
],
"title": "主页"
}
使用这些关键字的任何组合来定位一组页面:
路径
(字符串) 与 /content 下的内容路径匹配的 Glob 模式。需要使用 Unix 风格的斜杠。请注意,这是虚拟路径,因此它从挂载根目录开始。匹配支持双星号,因此您可以匹配 /blog/*/** 等模式以匹配从第三层及以下的任何内容。
类型
(字符串) 与页面的类型匹配的 Glob 模式,例如 “{home,section}"。
语言
(字符串) 与页面的语言匹配的 Glob 模式,例如 “{en,sv}"。
环境
(字符串) 与构建环境匹配的 Glob 模式,例如 “{production,development}"。
以上任何一项都可以省略。
示例
---
cascade:
params:
banner: images/typewriter.jpg
date: 2024-02-01T21:25:36-08:00
title: 文章
---+++
date = 2024-02-01T21:25:36-08:00
title = '文章'
[cascade]
[cascade.params]
banner = 'images/typewriter.jpg'
+++{
"cascade": {
"params": {
"banner": "images/typewriter.jpg"
}
},
"date": "2024-02-01T21:25:36-08:00",
"title": "文章"
}
使用上述示例,除非:
- 指定的子代已设置其自身的
banner值 - 或者更近的祖先节点已设置其自身的
cascade.banner值。
文章章节页面及其子代在调用 .Params.banner 时将返回 images/typewriter.jpg 。
Emacs Org 模式
如果您的 内容格式 是 [Emacs Org 模式],您可以使用 Org 模式关键字提供 front matter。例如:
# +TITLE: Example {#title-example}
# +DATE: 2024-02-02T04:14:54-08:00 {#date-2024-02-02t04-14-54-08-00}
# +DRAFT: false {#draft-false}
# +AUTHOR: John Smith {#author-john-smith}
# +GENRES: mystery {#genres-mystery}
# +GENRES: romance {#genres-romance}
# +TAGS: red {#tags-red}
# +TAGS: blue {#tags-blue}
# +WEIGHT: 10 {#weight-10}请注意,您也可以在一行中指定数组元素:
# +TAGS[]: red blue {#tags-red-blue}日期
填充日期字段时,无论是 自定义页面参数 还是四个预定义字段 (date 、 expiryDate 、 lastmod 、 publishDate) 之一,都使用以下可解析的格式之一:
| 格式 | 时区 |
|---|---|
2023-10-15T13:18:50-07:00 |
America/Los_Angeles |
2023-10-15T13:18:50-0700 |
America/Los_Angeles |
2023-10-15T13:18:50Z |
Etc/UTC |
2023-10-15T13:18:50 |
默认为 Etc/UTC |
2023-10-15 |
默认为 Etc/UTC |
2023年10月15日 |
默认为 Etc/UTC |
最后三个例子没有完全限定,默认为 Etc/UTC 时区。
要覆盖默认时区,请在站点配置中设置 timeZone 。确定时区的优先级顺序为:
- 日期/时间字符串中的时区偏移量
- 在站点配置中指定的时区
Etc/UTC时区