page
语法
page
在接收 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 is "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
对象,而不是内容页面。
如果 Hugo 在内容页面之前呈现章节页面,则缓存的呈现短代码将不正确。由于并发性,您无法控制呈现顺序。