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