章节页面模板
在章节模板中添加内容和前置元数据
要有效地利用章节页面模板,首先需要了解 Hugo 的内容组织,特别是为章节和其他列表页面添加内容和前置元数据的 _index.md
的作用。
章节模板的查找顺序
请参阅 模板查找。
页面种类
Hugo 中的每个 Page
都有一个 .Kind
属性。
类别 | 描述 | 示例 |
---|---|---|
home |
主页的着陆页 | /index.html |
page |
特定页面的着陆页 | my-post 页面 (/posts/my-post/index.html ) |
section |
特定部分的着陆页 | posts 部分 (/posts/index.html ) |
taxonomy |
分类法的着陆页 | tags 分类法 (/tags/index.html ) |
term |
一个分类法术语的着陆页 | 分类法 tags 中的术语 awesome (/tags/awesome/index.html ) |
与内容无关的其他四种页面类型为 robotsTXT
、RSS
、sitemap
和 404
。虽然主要供内部使用,但您可以在禁用网站上的一个或多个页面类型时指定名称。例如:
hugo.
disableKinds:
- robotsTXT
- "404"
disableKinds = ['robotsTXT', '404']
{
"disableKinds": [
"robotsTXT",
"404"
]
}
.Site.GetPage
与章节
可以在模板中将 Kind
与 where
函数结合使用,以创建特定种类的内容列表。这种方法适用于创建列表,但有时您可能只想通过章节的路径获取单个章节的索引页面。
.GetPage
函数 查找给定 Kind
和 path
的索引页面。
您可以使用两个参数调用 .Site.GetPage
:kind
(上述 Kind
的有效值之一)和 kind value
。
示例:
{{ .Site.GetPage "section" "posts" }}
{{ .Site.GetPage "page" "search" }}
示例:创建默认的章节模板
layouts/_default/section.html
{{ define "main" }}
<main>
{{ .Content }}
<ul class="contents">
{{ range .Paginator.Pages }}
<li>{{ .Title }}
<div>
{{ partial "summary.html" . }}
</div>
</li>
{{ end }}
</ul>
{{ partial "pagination.html" . }}
</main>
{{ end }}
示例:使用 .Site.GetPage
.Site.GetPage
示例假设以下项目目录结构:
.
└── content
├── blog
│ ├── _index.md # 前置元数据中的 "title: My Hugo Blog"
│ ├── post-1.md
│ ├── post-2.md
│ └── post-3.md
└── events #注意: "events" 中没有 _index.md 文件
├── event-1.md
└── event-2.md
如果没有找到 _index.md
页面,.Site.GetPage
将返回 nil
。因此,如果 content/blog/_index.md
不存在,则模板将输出章节名称:
<h1>{{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }}</h1>
由于 blog
中有一个带有前置元数据的章节索引页面,位于 content/blog/_index.md
,上述代码将返回以下结果:
<h1>My Hugo Blog</h1>
然而,如果对 events
章节尝试相同的代码,Hugo 将默认使用章节标题,因为没有 content/events/_index.md
提供内容和前置元数据:
<h1>{{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}</h1>
然后返回以下结果:
<h1>Events</h1>