HUGO
Menu
GitHub 87548 stars Mastodon

模板查找顺序

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(例如 rssamphtml)也有 suffix(例如 xmlhtml)。我们优先匹配两者(例如 index.amp.html),但也会查找不太具体的模板。

请注意,如果输出格式的 Media Type 定义了多个后缀,只考虑第一个。

Language(语言)
我们将考虑模板名称中的语言标签。如果站点语言是 frindex.fr.amp.html 将胜过 index.amp.html,但 index.amp.html 将在 index.fr.html 之前被选择。
Type(类型)
如果在前言中设置了 type,则是其值,否则是根部分的名称(例如 “blog”)。它总会有一个值,所以如果未设置,值是 “page”。
Section(部分)
sectiontaxonomyterm 类型相关。

模板可以位于项目或主题的 layout 目录中,将选择最具体的模板。Hugo 将交错进行下面列出的查找,在项目或主题中找到最具体的一个。

定位模板

您无法更改查找顺序来定位内容页面,但您可以更改内容页面以定位模板。在前沿中指定 typelayout 或两者。

考虑此内容结构:

content/
├── about.md
└── contact.md

content 目录根目录中的文件的 内容类型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

Last updated: January 1, 0001
Improve this page