基模板
block
关键字允许你定义页面一个或多个主模板的外壳,然后根据需要填充或覆盖部分内容。
基模板查找顺序
基模板的查找顺序与它所应用的模板(例如 _default/list.html
)的查找顺序非常接近。
详情和示例请参见 模板查找顺序 。
定义基模板
以下代码定义了位于 _default/baseof.html
的一个简单的基模板。作为默认模板,除非你在查找顺序的开头指定另一个更接近的 *baseof.html
,否则所有页面都将从此模板渲染。
layouts/_default/baseof.html
<!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>
覆盖基模板
默认列表模板将继承上面定义的所有代码,然后可以实现自己的 "main"
块:
layouts/_default/list.html
{{ define "main" }}
<h1>文章</h1>
{{ range .Pages }}
<article>
<h2>{{ .Title }}</h2>
{{ .Content }}
</article>
{{ end }}
{{ end }}
这将用对列表模板有用的内容替换我们(基本上是空的)“main” 块的内容。在本例中,我们没有定义 "title"
块,因此来自基模板的内容在列表中保持不变。
以下显示了如何使用对你的默认单一模板唯一的代码覆盖基模板中的 "main"
和 "title"
块区域:
layouts/_default/single.html
{{ define "title" }}
<!-- 这将覆盖在 baseof.html 中设置的默认值;即,原始示例中的 "{{ .Site.Title }}" -->
{{ .Title }} – {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ end }}