• template模板


    一、template模板案例

    1、解析字符串

    package main
    
    import (
    	"log"
    	"os"
    	"text/template"
    )
    
    func main() {
    	//Default返回一个默认的路由引擎
    	txt := `{{ . }}`
    	data := "james"
    
    	//创建模板
    	tpl := template.New("txtTemplate")
    
    	tpl, err := tpl.Parse(txt)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	//执行输出到控制台
    	err = tpl.Execute(os.Stdout, data)
    	//fmt.Println(err)
    }
    

    2、携带if else

    func main() {
    	//Default返回一个默认的路由引擎
    	txt := `{{ if . }}
    	true
    	{{ else }}
    	无内容
    	{{end}}
    	`
    	data := true
    
    	//创建模板
    	tpl := template.New("txtTemplate")
    
    	tpl, err := tpl.Parse(txt)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	//执行输出到控制台
    	err = tpl.Execute(os.Stdout, data)
    	//fmt.Println(err)
    }
    //输出true

    3、index索引

    func main() {
    	//Default返回一个默认的路由引擎
    	txt := `{{ index . 2}}`
    	data := []int{2, 2, 3, 4}
    
    	//创建模板
    	tpl := template.New("txtTemplate")
    
    	tpl, err := tpl.Parse(txt)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	//执行输出到控制台
    	err = tpl.Execute(os.Stdout, data)
    	//fmt.Println(err)
    }

    4、range遍历

    package main
    
    import (
    	"log"
    	"os"
    	"text/template"
    )
    
    func main() {
    	//Default返回一个默认的路由引擎
    	//range 中,表示遍历的每一个元素,输出的是值
    	txt := `{{ range . }}
    	  {{ . }}
    	{{ end }}     
    	`
    	//输出k,v
    	txt1 :=`{{ range $i,$v := . }}
    	{{ $i }}: {{ $v }}
        {{ end }}     
        `
    	data := []int{2, 2, 3, 4}
    
    	//创建模板
    	tpl := template.New("txtTemplate")
    
    	tpl, err := tpl.Parse(txt)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	//执行输出到控制台
    	err = tpl.Execute(os.Stdout, data)
    	//fmt.Println(err)
    }
    

    5、对结构体操作

    package main
    
    import (
    	"log"
    	"os"
    	"text/template"
    )
    
    type User struct {
    	ID   string
    	Name string
    }
    
    func main() {
    	//Default返回一个默认的路由引擎
    	txt := `
    	<table>
    	   <thead>
    	      <tr>
    		     <th>ID</th>
    	         <th>Name</th>
    		  </tr>
    		</thead>
    		<tbody>
    		{{ range . }}
    		     <tr>
    			     <td>{{ .ID }}</td>
    				 <td>{{ .Name }}</td>
    			 </tr>
    		</tbody>
    		</table>
    		{{ end }}
    	`
    	data := []User{{"1", "小明"}, {"2", "小李"}}
    
    	//创建模板
    	tpl := template.New("txtTemplate")
    
    	tpl, err := tpl.Parse(txt)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	//执行输出到控制台
    	err = tpl.Execute(os.Stdout, data)
    	//fmt.Println(err)
    }
    

    二、模板嵌套

    package main
    
    import (
    	"os"
    	"text/template"
    )
    
    type title struct {
    	Title string
    }
    func main(){
    	header :=`{{ define "header"}}<head><meta charset="utf-8"/><title>{{ .Title }}</title></head>{{ end }}`
    	page1 :=`{{ define "page1" }}<!DOCYPE html>
       <html>
            {{ template "header" . }}
            <body>
             this is page1
            </body>
       </html>
       {{ end }}
        `
    	page2 :=`{{ define "page2"}}<!DOCYPE html>
       <html>
           {{ template "header" . }}
           <body>
            this is page2
           </body>
       </html>
       {{ end }}
       `
    	var ti1 =title{"定义page1"}
    	tp1,_ :=template.New("tp1").Parse(header)
    	tp1,_ = tp1.Parse(page1)
    	tp1,_ = tp1.Parse(page2)
    	tp1.ExecuteTemplate(os.Stdout,"page1",ti1)
    
    }

     三、分开模板

    1、page.html文件

    <!DOCYPE html>
    <html>
           {{ template "header.html" . }}//文件名称进行引用
           <body>
            this is page2
           </body>
    </html>
    

    2、header.html文件

    <head><meta charset="utf-8"/><title>{{ .Title }}</title></head>
    

    3、go文件

    package main
    
    import (
    
    	"html/template"
    	"os"
    )
    
    type User struct {
    	ID string
    	Name string
    }
    
    func main(){
    	tpl,_ :=template.New("tpl").ParseFiles("tpl/header.html","tpl/page.html")
    	tpl.ExecuteTemplate(os.Stdout,"page.html", struct {		Ttile string }{"模板文件"})

     四、go文件内书写html

    package main
    
    import (
    	"fmt"
    	"net/http"
    	"text/template"
    )
    
    func main() {
    
    	http.HandleFunc("/header/", func(w http.ResponseWriter, r *http.Request) {
    
    		tpl, err := template.ParseFiles("./HTML/index.html")
    		if err != nil {
    			panic(err)
    		}
    		err = tpl.ExecuteTemplate(w, "index.html", nil)
    		if err != nil {
    			panic(err)
    		}
    
    		fmt.Println("------------------")
    	})
    
    	http.ListenAndServe(":9099", nil)
    
    }
    

      

  • 相关阅读:
    神秘题目4
    神秘题目3
    神秘题目2
    AC自动机
    Fence Obstacle Course 题解
    Fractal Streets
    龟速乘
    快速幂
    Stall Reservation
    Sunscreen
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/14930807.html
Copyright © 2020-2023  润新知