为区块模板添加内容和前言设定

为有效使用区块页模板, 建议您先理解hugo的内容组织, 特别的,理解 _index.md文件在给section和其他list页面添加内容和前言设定时的作用。

区块模板查询顺序

参考模板查询顺序 Template Lookup.

页面类型 Page Kinds

Hugo中每个Page具有.Kind属性

类型 Kind描述 Description例子 Example
home首页的登陆页/index.html
page指定页面的登陆页my-post page (/posts/my-post/index.html)
section指定区块的登陆页posts section (/posts/index.html)
taxonomy标签列表的登陆页tags taxonomy (/tags/index.html)
term标签条目列表的登录页term awesome in tags taxonomy (/tags/awesome/index.html)

在区块内使用.Site.GetPage

kind类型可以在模板内很容易的和where 函数配合创建类型特定的内容列表。 对于创建list这个方法很理想, 不过有时您可能想通过区块的路径获取仅仅一个单独区块的index页面。

函数 .GetPage 查询指定Kindpath的索引页。

可以使用两个参数kind类型 (上表的有效值中选一个) 和 kind value 类型值调用.Site.GetPage函数

举例:

  • {{ .Site.GetPage "section" "posts" }}
  • {{ .Site.GetPage "page" "search" }}

例子: 创建默认的区块模板

layouts/_default/section.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

{{ 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例子假设项目具有如下的目录结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
.
└── content
    ├── blog
    │   ├── _index.md # "title: My Hugo Blog" in the front matter
    │   ├── post-1.md
    │   ├── post-2.md
    │   └── post-3.md
    └── events #Note there is no _index.md file in "events"
        ├── event-1.md
        └── event-2.md

如果没找到 _index.md 页面, .Site.GetPage 会返回nil. 因此,如果content/blog/_index.md不存在, 模板会输出区块名称.

1
<h1>{{ with .Site.GetPage "section" "blog" }}{{ .Title }}{{ end }}</h1>

由于blog区块具有索引页面content/blog/_index.md并且有前言设定,上面例子会输出如下结果:

1
<h1>My Hugo Blog</h1>

如果对events区块应用同样代码,由于没有 content/events/_index.md,无法读取内容和前言设定,Hugo会使用区块标题的默认值:

1
<h1>{{ with .Site.GetPage "section" "events" }}{{ .Title }}{{ end }}</h1>

这个代码会返回如下输出:

1
<h1>Events</h1>