goWeb模板继承

124 阅读2分钟

模板继承

  • 介绍: 模板继承是指对各种类似的固定板块的复用,例如说很多时候我们的开发网站的时候,其实不同的网页很多的地方都是类似的,所以说利用模板继承可以复用模板,减少工作量,代码也更加简洁

  • 关键字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
           }
       }
       ​