组合模板的应用

组合模板概述

在一般网站开发中,我们经常遇到站点的头部、底部或者左侧菜单是一样的,我们可以使用组合模板来实现这样的功能。

实现组合模板的步骤

1. 定义 layout 布局模板

{{define "layout"}}
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <h1>公共头部</h1>
    {{template "body" .}}
    <h1>公共底部</h1>
</body>
</html>
{{end}}

2. 定义内容模板

如 home.html

{{ define "body" }}
<h2>{{.}}</h2>
{{ end }}

和 about.html

{{ define "body" }}
<h2>{{.}}</h2>
<p>关于 ......</p>
{{ end }}

3. 在 handle 中解析并执行对应的模板

package main

import (
	"html/template"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		t, err := template.ParseFiles("./tmpls/layout.html", "./tmpls/home.html")
		if err != nil {
			println(err.Error())
			return
		}
		t.ExecuteTemplate(w, "layout", "首页")
	})
	http.HandleFunc("/about", func(w http.ResponseWriter, r *http.Request) {
		t, err := template.ParseFiles("./tmpls/layout.html", "./tmpls/about.html")
		if err != nil {
			println(err.Error())
			return
		}
		t.ExecuteTemplate(w, "layout", "关于我们")
	})
	http.ListenAndServe(":80", nil)
}