模板继承
-
介绍: 模板继承是指对各种类似的固定板块的复用,例如说很多时候我们的开发网站的时候,其实不同的网页很多的地方都是类似的,所以说利用模板继承可以复用模板,减少工作量,代码也更加简洁
-
关键字
block- 语法:
{{block "name" pipeline}} T {{end}}
- 语法:
-
需要继承的模板,需要先继承根模板,然后再利用define关键字定义内容
-
例子
-
base.tmp文件<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>模板继承</title> </head> <style> *{ background-color:white; } </style> <body> <h1 style="color:red">模板继承</h1> <hr> <h2 style="color:blue">变化的内容:</h2> <div>{{block "context" .}} <p>会发生变化的地方</p> <div> <a href="http://localhost:9000/index">Index页面</a><br> <a href="http://localhost:9000/home">Home页面</a> </div> {{end}}</div> </body> </html>- 其中涉及一点点的
css内容,不影响阅读
- 其中涉及一点点的
-
index.tmpl文件{{/*继承根模板*/}} {{template "base.tmpl" .}} {{/*定义块模板*/}} {{define "context"}} <h2>Index页面</h2> <p>Hello,{{.}}</p> <a href="http://localhost:9000">Base页面</a> {{end}}- 先是继承然后定义内容,其中
{{template "base.tmpl" .}}的" . "指传入的值,而<p>Hello,{{.}}</p>的" . "接收该值 - 还有这里define后面的文件名,一定要与block时定义的名字一致
- 先是继承然后定义内容,其中
-
home.tmpl文件{{/*继承根模板*/}} {{template "base.tmpl" .}} {{/*定义块模板*/}} {{define "context"}} <h2>Home页面</h2> <p>Hello,{{.}}</p> <a href="http://localhost:9000">Base页面</a> {{end}}- 和上面的基本一致
-
后端代码
package main import ( "html/template" "log" "net/http" ) func main() { http.HandleFunc("/", base) http.HandleFunc("/index", index) http.HandleFunc("/home", home) err := http.ListenAndServe(":9000", nil) if err != nil { log.Println(err) return } } func base(w http.ResponseWriter, r *http.Request) { //定义模板 //解析模板 t, err := template.New("base.tmpl").ParseFiles("src\使用html和template包\Go语言模板语法\模板继承\base.tmpl") if err != nil { log.Println("解析失败:", err) return } //渲染模板 err = t.Execute(w, nil) if err != nil { log.Println("渲染失败:", err) return } } func index(w http.ResponseWriter, r *http.Request) { //定义模板 //解析模板(涉及嵌套模板) t, err := template.New("base.tmpl").ParseFiles("src\使用html和template包\Go语言模板语法\模板继承\base.tmpl", "src\使用html和template包\Go语言模板语法\模板继承\index.tmpl") if err != nil { log.Println("解析失败:", err) return } name := "贤哥!" //渲染模板 err = t.ExecuteTemplate(w, "index.tmpl", name) if err != nil { log.Println("渲染失败:", err) return } } func home(w http.ResponseWriter, r *http.Request) { //定义模板 //解析模板 t, err := template.New("base.tmpl").ParseFiles("src\使用html和template包\Go语言模板语法\模板继承\base.tmpl", "src\使用html和template包\Go语言模板语法\模板继承\home.tmpl") if err != nil { log.Println("解析失败:", err) return } name := "振哥!" //渲染模板 err = t.ExecuteTemplate(w, "home.tmpl", name) if err != nil { log.Println("渲染失败:", err) return } }
-