基础模板与块
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" }}
<!-- 这将覆盖基础模板中设置的默认值,即原示例中的 "{{ .Site.Title }}" -->
{{ .Title }} – {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ .Content }}
{{ end }}