page
New in v0.111.0
在接收到 Page
物件作為上下文的模板頂層,以下是等效的:
{{ .Params.foo }}
{{ .Page.Params.foo }}
{{ page.Params.foo }}
當上下文中沒有 Page
物件時,您可以使用全域 page
函數:
{{ page.Params.foo }}
解釋
Hugo 幾乎總是將 Page
作為資料上下文傳遞到頂層模板中(例如 single.html
)。唯一的例外是多主機網站地圖模板。這意味著您可以使用 .
來訪問當前頁面。
但當您位於 內容視圖、區塊 或 渲染鉤子 內的深層結構中時,並非總是實際或可能訪問 Page
物件。
使用全域 page
函數從任何模板中的任何位置訪問 Page
物件。
警告
注意頂層上下文
全域 page
函數訪問的是傳遞到頂層模板中的 Page
物件。
使用此內容結構:
content/
├── posts/
│ ├── post-1.md
│ ├── post-2.md
│ └── post-3.md
└── _index.md <-- title 為 "My Home Page"
和此代碼在首頁模板中:
{{ range site.Sections }}
{{ range .Pages }}
{{ page.Title }}
{{ end }}
{{ end }}
渲染的輸出將是:
My Home Page
My Home Page
My Home Page
在上述範例中,全域 page
函數訪問的是傳遞到首頁模板中的 Page
物件;它並未訪問迭代頁面的 Page
物件。
注意緩存
不要在以下情況中使用全域 page
函數:
- 短碼
- 由短碼調用的區塊
- 使用
partialCached
函數緩存的區塊
Hugo 會緩存渲染的短碼。如果您在短碼中使用全域 page
函數,並且頁面內容被渲染到兩個或更多模板中,則緩存的短碼可能是錯誤的。
考慮以下部分模板:
{{ range .Pages }}
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
{{ .Summary }}
{{ end }}
當您調用 Summary
方法時,Hugo 渲染頁面內容,包括短碼。在這個情況下,在短碼內,全域 page
函數訪問的是區段頁面的 Page
物件,而不是內容頁面的 Page
物件。
如果 Hugo 先渲染區段頁面,再渲染內容頁面,則緩存的渲染短碼將會錯誤。由於並發處理,您無法控制渲染順序。