模板查找顺序
查找规则
Hugo 在选择给定页面的模板时会考虑下面列出的参数。模板按照特性的具体程度排序。这应该感到自然,但你可以查看下面的表格来了解不同参数变化的具体示例。
- Kind
- 页面的
Kind
(主页是其中之一)。请参考下面每种类型的示例表格。这也确定了它是单页(即常规内容页。我们会在_default/single.html
中查找对应的模板)还是列表页(部分列表页、主页、分类列表、分类术语。我们会在_default/list.html
中查找对应的模板)。 - Layout
- 可以在正文开头设置。
- Output Format
- 请参阅自定义输出格式。输出格式具有一个
name
(例如rss
、amp
、html
)和一个suffix
(例如xml
、html
)。我们倾向于同时匹配这两者(例如index.amp.html
),但也会查找更不具体的模板。
注意,如果输出格式的媒体类型定义了多个后缀,只会考虑第一个。
- Language
- 我们会在模板名称中考虑语言标签。如果网站语言是
fr
,index.fr.amp.html
将优先于index.amp.html
,但index.amp.html
将优先于index.fr.html
。 - Type
- 如果在正文开头设置了
type
,那么它是type
的值,否则它是根部分的名称(例如,“blog”)。它始终有一个值,因此如果未设置,则值为 “page”。 - Section
- 对于
section
、taxonomy
和term
类型是相关的。
定位到一个模板
你不能更改查找顺序以定位到一个内容页,但你可以更改一个内容页以定位到一个模板。在正文开头指定 type
、layout
或两者。
考虑下面的内容结构:
content/
├── about.md
└── contact.md
内容目录的根文件具有 page
内容类型。要使用一个独特的模板渲染这些页面,请创建一个匹配的子目录:
layouts/
└── page/
└── single.html
但是联系页面可能有一个表单,需要一个不同的模板。在正文开头指定 layout
:
content/contact.md.
layout: contact
title: Contact
layout = 'contact'
title = 'Contact'
{
"layout": "contact",
"title": "Contact"
}
然后创建联系页面的模板:
layouts/
└── page/
└── contact.html <-- 渲染 contact.md
└── single.html <-- 渲染 about.md
作为一个内容类型,page
这个词是模糊的。也许 miscellaneous
更合适。在每个页面的正文开头添加 type
:
content/about.md.
title: About
type: miscellaneous
title = 'About'
type = 'miscellaneous'
{
"title": "About",
"type": "miscellaneous"
}
content/contact.md.
layout: contact
title: Contact
type: miscellaneous
layout = 'contact'
title = 'Contact'
type = 'miscellaneous'
{
"layout": "contact",
"title": "Contact",
"type": "miscellaneous"
}
现在将模板放置在对应的目录中:
layouts/
└── miscellaneous/
└── contact.html <-- 渲染 contact.md
└── single.html <-- 渲染 about.md
主页
示例 | OutputFormat | 后缀 | 模板查找顺序 |
---|---|---|---|
html |
|
||
html |
|
||
html |
|
||
html |
|
||
html |
|
||
amp |
|
||
json |
|
||
rss |
|
单页
示例 | OutputFormat | 后缀 | 模板查找顺序 |
---|---|---|---|
html |
|
||
html |
|
||
html |
|
||
html |
|
||
amp |
|
||
html |
|
部分页面
部分页面是给定部分中页面的列表。
示例 | OutputFormat | 后缀 | 模板查找顺序 |
---|---|---|---|
html |
|
||
html |
|
||
html |
|
||
rss |
|
分类页面
分类页面是给定分类法中术语的列表。下面的示例假设以下站点配置:
hugo.
taxonomies:
category: categories
[taxonomies]
category = 'categories'
{
"taxonomies": {
"category": "categories"
}
}
示例 | OutputFormat | 后缀 | 模板查找顺序 |
---|---|---|---|
html |
|
||
rss |
|
术语页面
术语页面是与给定术语关联的页面列表。下面的示例假设以下站点配置:
hugo.
taxonomies:
category: categories
[taxonomies]
category = 'categories'
{
"taxonomies": {
"category": "categories"
}
}
示例 | OutputFormat | 后缀 | 模板查找顺序 |
---|---|---|---|
html |
|
||
rss |
|