章节页面模板
在章节模板中添加内容和前置元数据
要有效地利用章节页面模板,首先需要了解 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>