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)

}

  

posted @ 2021-06-25 14:36  南昌拌粉的成长  阅读(268)  评论(0编辑  收藏  举报