区块
关键词允许您定义页面的一个或者多个主模板的外壳,然后在需要时填入或者重载.
基础模板查询顺序
从Hugo版本V0.63开始, 基础模板的查询顺序紧随其适用的模板. (比如 _default/list.html
).
参考 模板查询顺序 获得更多细节和例子的信息.
定义基础模板
下面例子定义了一个简单的基础模板_default/baseof.html
.
作为一个缺省模板, 它是所有页面呈现的外壳,
除非重新指明了接近模板查询顺序开始的另一个*baseof.html
.
layouts/_default/baseof.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ block "title" . }}
<!-- 区块可以包含缺省内容 -->
{{ .Site.Title }}
{{ end }}</title>
</head>
<body>
<!-- 所有模板都分享的代码, 比如一个头部部分 -->
{{ block "main" . }}
<!-- 不同模板开始不同的页面的部分 -->
{{ end }}
{{ block "footer" . }}
<!-- 更多共享代码, 可能是页脚,但是也可以被重载如果有需要-->
{{ end }}
</body>
</html>
|
重载基础模板
基于上面的基础模板, 可以定义默认的list模板. 默认的list模板从基础模板中继承所有定义在 "main"
之前的代码, 然后实现自己的"main"
区块:
layouts/_default/list.html
1
2
3
4
5
6
7
8
9
10
|
{{ define "main" }}
<h1>Posts</h1>
{{ range .Pages }}
<article>
<h2>{{ .Title }}</h2>
{{ .Content }}
</article>
{{ end }}
{{ end }}
|
这样将我们的 “main”(基本为空白)区块内容替换为对list模板有意义的内容。
这里, 我们并没有定义"title"
区块, 所以从基础模板中的内容在lists中仍然不变.
下面默认的单页模板例子中显示如何重载基础模板中的 "main"
和 "title"
区块,
并且应用了针对默认的单页模板特别的代码:
layouts/_default/single.html
1
2
3
4
5
6
7
8
9
|
{{ define "title" }}
<!-- 这里覆盖了 baseof.html 中的默认值 "{{.Site.Title}}"-在一开始的例子中的 -->
{{ .Title }} – {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ end }}
|