HUGO
Menu
GitHub 87548 stars Mastodon

Hugo v0.146.0 中的新模板系統

Hugo v0.146.0 中新模板系統的概述。

Hugo v0.146.0 中,我們完全重新實現了 Hugo 中處理 Go 模板的方式。這包括 layouts 文件夾的結構性變化和一個新的、更強大的模板查找系統。

我們的目標是盡可能保持向後兼容性,通過"舊到新"的映射,但已經報告了一些破壞性變化。我們正在努力全面修訂此主題文檔——在此之前,這是包含最重要變化的單頁文檔。

layouts 文件夾的變化

描述 需要采取的操作
_default 文件夾已移除。 layouts/_default 中的所有文件移動到 layouts/ 根目錄。
layouts/partials 文件夾重命名為 layouts/_partials 重命名文件夾。
layouts/shortcodes 文件夾重命名為 layouts/_shortcodes 重命名文件夾。
layouts 中任何不以 _ 開頭的文件夾代表 頁面路徑 的根目錄。在 Hugo v0.146.0 中,這可以根據需要嵌套,_shortcodes_markup 文件夾可以放置在樹中的任何級別。 無需操作。
上述內容還意味著不再有頂層 layouts/taxonomylayouts/section 文件夾,除非它代表 頁面路徑 將它們移動到 layouts/,使用 頁面種類 sectiontaxonomyterm 作為基本名稱,或將布局放置在分類法 頁面路徑 中。
以前名為 taxonomy.html 的模板曾經是 termtaxonomy 頁面種類的候選,現在僅考慮用於 taxonomy 創建 taxonomy.htmlterm.html,或創建更通用的布局,例如 list.html
對於基礎模板(例如 baseof.html),在以前的 Hugo 版本中,您可以在 baseof 關鍵字前 prepended 一個標識符(布局、類型或種類)並加上連字符。 將該標識符移動到第一個"點"之後,例如將 list-baseof.html 重命名為 baseof.list.html
我們添加了一個新的 all"catch-all"布局。這意味著如果您有例如 layouts/all.html` 且那是唯一的模板,則該布局將用於所有 HTML 頁面渲染。
我們移除了 _internal Hugo 模板的概念。1 將類似 {{ template "_internal/opengraph.html" . }} 的結構替換為 {{ partial "opengraph.html" . }}
模板文件名中使用的標識符是 頁面種類 之一(homepagesectiontaxonomyterm)、標准布局之一(listsingleall)、自定義布局(如在 layout 前言語段字段中定義)、語言(例如 en)、輸出格式(例如 htmlrss)和表示媒體類型的後綴。例如 all.en.htmlhome.rss.xml
上述內容意味著不再有用於主頁的 index.html 模板。 index.html 重命名為 home.html

另請參閱下面的 示例文件夾結構 以獲取新布局系統的具體示例。

模板查找順序的變化

我們整合了模板查找,使其在所有 模板類型 中工作方式相同。以前的設置很難理解,並且有大量變體。新設置旨在感覺自然,幾乎沒有意外。

模板權重中使用的標識符按重要性順序排列:

標識符 描述
自定義布局 在前言中設置的自定義 layout
頁面種類 homesectiontaxonomytermpage 之一。
標准布局 1 listsingle
輸出格式 輸出格式(例如 htmlrss)。
標准布局 2 all
語言 語言(例如 en)。
媒體類型 媒體類型(例如 text/html)。
頁面路徑 頁面路徑(例如 /blog/mypost)。
類型 在前言中設置的 type2

對於部分或完全匹配 頁面路徑layouts 文件夾中放置的模板,向上更近的匹配將被視為_更好_。在下面的 示例文件夾結構 中,這意味著:

  • layouts/docs/api/_markup/render-link.html 將用於渲染來自頁面路徑 /docs/api 及以下的鏈接。
  • layouts/docs/baseof.html 將用作頁面路徑 /docs 及以下的基礎模板。
  • layouts/tags/term.html 將用於 tags 分類法中的所有 term 渲染,除了 blue 術語,它將使用 layouts/tags/blue/list.html

示例文件夾結構

layouts
├── baseof.html
├── baseof.term.html
├── home.html
├── page.html
├── section.html
├── taxonomy.html
├── term.html
├── term.mylayout.en.rss.xml
├── _markup
│   ├── render-codeblock-go.term.mylayout.no.rss.xml
│   └── render-link.html
├── _partials
│   └── mypartial.html
├── _shortcodes
│   ├── myshortcode.html
│   └── myshortcode.section.mylayout.en.rss.xml
├── docs
│   ├── baseof.html
│   ├── _shortcodes
│   │   └── myshortcode.html
│   └── api
│       ├── mylayout.html
│       ├── page.html
│       └── _markup
│           └── render-link.html
└── tags
    ├── taxonomy.html
    ├── term.html
    └── blue
        └── list.html

  1. 舊的方式使得例如在主題中覆蓋 _internal/disqus.html 非常困難/不可能。現在您可以只創建同名的部分。 ↩︎

  2. 在前言中設置的 type 將在進行查找時有效地替換 頁面路徑 中的 section 文件夾。 ↩︎


Last updated: January 1, 0001
Improve this page