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 先渲染區段頁面,再渲染內容頁面,則緩存的渲染短碼將會錯誤。由於並發處理,您無法控制渲染順序。