模板渲染语言

模板语言:

1.if 

• not
{{if not .condition}} 

{{end}}

• and
{{if and .condition1 .condition2}} 

{{end}}

• or
{{if or .condition1 .condition2}} 

{{end}}

• eq 等于
{{if eq .var1 .var2}} 

{{end}}

• ne 不等于
{{if ne .var1 .var2}} 

{{end}}

• lt ⼩于 (less than)

{{if lt .var1 .var2}} 

{{end}}

• le ⼩于等于
{{if le .var1 .var2}} 

{{end}}

• gt ⼤于
{{if gt .var1 .var2}} 

{{end}}

• ge ⼤于等于
{{if ge .var1 .var2}} 

{{end}}

2.{{.}}

<html>
<head>
</head>
<body>
<p>hello, old man, {{.}}</p>
</body>
</html>

3.{{with .Var}}

<html> <head>
</head>
<body>
{{with .Name}}
<p>hello, old man, {{.}}</p>
{{end}}
</body>
</html>

4.循环

<html>
<head>
</head>
<body>
{{range .}}
{{if gt .Age 18}}
<p>hello, old man, {{.Name}}</p>
{{else}}
<p>hello,young man, {{.Name}}</p>
{{end}}
{{end}}
</body>
</html>

 .   代表了传进去的对象

例:

1.if 渲染模板到终端

package main
import (
	"fmt"
	"text/template"
	"os"
)
type Person struct{
	Name string
	Age int
}
func main(){
	t,err := template.ParseFiles("index.html")  //从index.html中读取内容,并生成模板。
	if err != nil {
		fmt.Println("parse file error:",err)
		return
	}
	p := Person{
		Name:"whj",
		Age:17,
	}
	if err := t.Execute(os.Stdout,p);err != nil {  //把渲染的模板内容打印到终端
		fmt.Println("there was an error:",err.Error)
	}

}

  index.html

<html>
    <head>
    </head>
    <body>
    {{if gt .Age 18}}
    <p>hello, old man, {{.Name}}</p>
    {{else}}
    <p>hello,young man, {{.Name}}</p>
    {{end}}
    </body>
</html>

  运行结果:

2.if  渲染模板到网页

package main
import (
	"fmt"
	"text/template"
	// "os"
	"net/http"
)
type Person struct{
	Name string
	Age int
}
var tem *template.Template
func init(){
	t,err := template.ParseFiles("index.html")  //从index.html中读取内容,并生成模板,把生成模板单独提取出来,利用init函数自动执行生成模板
	if err != nil {
		fmt.Println("parse file error:",err)
		return
	}
	tem = t           //利用全局变量保存生成的模板,方便使用
}
func user_info(w http.ResponseWriter,r *http.Request){
	p := Person{
		Name:"whj",
		Age:17,
	}
	if err := tem.Execute(w,p);err != nil {  //把渲染的模板内容写到网页
		fmt.Println("there was an error:",err.Error)
	}
}
func main(){
	http.HandleFunc("/user_info",user_info)
	err:=http.ListenAndServe(":8080",nil)
	if err != nil {
		fmt.Println("http listen failed err:",err)
	}
	/*
	t,err := template.ParseFiles("index.html")  //从index.html中读取内容,并生成模板。
	if err != nil {
		fmt.Println("parse file error:",err)
		return
	}*/
	

}

  查看结果:

3. {{ . }} 渲染

index.html:

<html>
    <head>
    </head>
    <body>
    {{if gt .Age 18}}
    <p>hello, old man, {{.}}</p>
    {{else}}
    <p>hello,young man, {{.}}</p>
    {{end}}
    </body>
    </html>

  查看运行结果:

.   代表了传进去的对象

4. with

index.html

<html>
    <head>
    </head>
    <body>
        {{with .Name}}
        <p>hello, old man, {{.}}</p>  //这一行中的点代表了  .Name
        {{end}}
    </body>
    </html>

  查看结果 :

5.循环

range:

package main
import(
	"fmt"
	"text/template"
	"net/http"
)
var t1 *template.Template
func init(){
	t,err := template.ParseFiles("index.html")
	if err != nil {
		fmt.Println("paser file err",err)
		return
	}
	t1 = t
}
type Person struct{
	Name string
	Age int
}
func FormServer(w http.ResponseWriter, r *http.Request){
	// p := Person{Name:"Mary",Age:23}
	var stu []*Person     //生成切片,循环切片
	for i:=0;i<5;i++{
		stu1:=&Person{
			Name:string(i),
			Age:i*5,

		}
		stu=append(stu,stu1)   //生成切片
	}
	t1.Execute(w,stu)      //把切片传入模板
}
func main(){
	http.HandleFunc("/userinfo",FormServer)
	http.ListenAndServe(":8080",nil)
}

  index.html:

<html>
    <head>
    </head>
    <body>
    {{range .}}
    {{if gt .Age 18}}
    <p>hello, old man, {{.Name}}</p>
    {{else}}
    <p>hello,young man, {{.Name}}</p>
    {{end}}
    {{end}}
    </body>
<html>
    

  查看运行结果:

原文地址:https://www.cnblogs.com/wanghaijun999/p/8481657.html