模板查找順序
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