模板查找顺序
Hugo 使用以下规则为给定页面选择模板,从最具体的开始。
We did a complete overhaul of Hugo’s template system in v0.146.0.
We’re working on getting all of the relevant documentation up to date, but until
then, see this page.
查找规则
Hugo 在选择给定页面的模板时会考虑下面列出的参数。模板按特异性排序。这应该感觉很自然,但请查看下面的表格以查看不同参数变化的具体示例。
- Kind(种类)
- 页面
Kind(主页是其中之一)。请参阅下面按种类划分的示例表格。这也确定它是 单页面(即常规内容页面。然后我们在_default/single.html中查找 HTML 模板)还是 列表页面(部分列表、主页、分类法列表、分类法术语。然后我们在_default/list.html中查找 HTML 模板)。 - Layout(布局)
- 可以在前言中设置。
- Output Format(输出格式)
- 请参阅 配置输出格式。输出格式既有
name(例如rss、amp、html)也有suffix(例如xml、html)。我们优先匹配两者(例如index.amp.html),但也会查找不太具体的模板。
请注意,如果输出格式的 Media Type 定义了多个后缀,只考虑第一个。
- Language(语言)
- 我们将考虑模板名称中的语言标签。如果站点语言是
fr,index.fr.amp.html将胜过index.amp.html,但index.amp.html将在index.fr.html之前被选择。 - Type(类型)
- 如果在前言中设置了
type,则是其值,否则是根部分的名称(例如 “blog”)。它总会有一个值,所以如果未设置,值是 “page”。 - Section(部分)
- 与
section、taxonomy和term类型相关。
模板可以位于项目或主题的 layout 目录中,将选择最具体的模板。Hugo 将交错进行下面列出的查找,在项目或主题中找到最具体的一个。
定位模板
您无法更改查找顺序来定位内容页面,但您可以更改内容页面以定位模板。在前沿中指定 type、layout 或两者。
考虑此内容结构:
content/
├── about.md
└── contact.mdcontent 目录根目录中的文件的 内容类型 为 page。要使用独特的模板渲染这些页面,请创建匹配的子目录:
layouts/
└── page/
└── single.html但联系页面可能有表单并需要不同的模板。在前沿中指定 layout:
---
layout: contact
title: 联系
---+++
layout = 'contact'
title = '联系'
+++{
"layout": "contact",
"title": "联系"
}
然后为联系页面创建模板:
layouts/
└── page/
└── contact.html <-- 渲染 contact.md
└── single.html <-- 渲染 about.md作为内容类型,单词 page 很模糊。也许 miscellaneous 会更好。在每页的前沿中添加 type:
---
title: 关于
type: miscellaneous
---+++
title = '关于'
type = 'miscellaneous'
+++{
"title": "关于",
"type": "miscellaneous"
}
---
layout: contact
title: 联系
type: miscellaneous
---+++
layout = 'contact'
title = '联系'
type = 'miscellaneous'
+++{
"layout": "contact",
"title": "联系",
"type": "miscellaneous"
}
现在将布局放置在相应的目录中:
layouts/
└── miscellaneous/
└── contact.html <-- 渲染 contact.md
└── single.html <-- 渲染 about.md