模板渲染语言
模板语言:
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 渲染模板到终端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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
1 2 3 4 5 6 7 8 9 10 11 | < 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 渲染模板到网页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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:
1 2 3 4 5 6 7 8 9 10 11 | < 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
1 2 3 4 5 6 7 8 9 | < html > < head > </ head > < body > {{with .Name}} < p >hello, old man, {{.}}</ p > //这一行中的点代表了 .Name {{end}} </ body > </ html > |
查看结果 :
5.循环
range:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | < 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 > |
查看运行结果:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥