Go语言学习之http/template-模板嵌套
演示实例
模板自定义函数 Funcs
HTML代码部分
- 在模板内调用自定义函数
{{ (funcName) . }}
<!DOCTYPE html>
<html lang = "zh-CN">
<head>
<title>
Nesting_Func
</title>
</head>
<body>
{{ kua . }}
</body>
</html>
Golang代码部分
- 自定义函数
func_kua
func_kua := func( name string)( string , error ){return name + ",年轻又帅气" , nil}
template.New("NestFunc.tmpl")
:创建一个名称”NestFunc”为模板对象,名字一定要与模板的名字对上
t.Funcs(template.FuncMap{"kua" : func_kua ,})
- 告知引擎,多了一个自定义的函数
package main
import (
"fmt"
"html/template"
"net/http"
)
// 遇事不决 , 注释先行
func NestFunc(w http.ResponseWriter , r *http.Request){
// 1.编写模板 "NestFunc.tmpl"
func_kua := func( name string)( string , error ){
return name + ",年轻又帅气" , nil
}
// 创建一个名称"NestFunc"为模板对象,名字一定要与模板的名字对上
t := template.New("NestFunc.tmpl")
// 告知引擎,多了一个自定义的函数
t.Funcs(template.FuncMap{
"kua" : func_kua ,
})
// 2.解析模板
// ParseFiles:请勿刻舟求剑
_ , err := t.ParseFiles("./NestFunc.tmpl")
if err != nil{
fmt.Printf("template Parse failed , err : %v\n",err)
return
}
// 3.渲染模板
t.Execute(w,"靓仔")
if err != nil{
fmt.Printf("template Execute failed , err : %v\n",err)
return
}
}
func main(){
http.HandleFunc("/NestFunc",NestFunc)
err := http.ListenAndServe("127.0.0.1:9000",nil)
if err != nil{
fmt.Printf("HTTP Serve failed , err : %v\n",err)
return
}
}
嵌套template .tmpl
演示事例
当前工作目录下创建t.tmpl
,ul.tmpl
,在其t.tmpl
下声明ul.tmpl
和ol.tmpl
,其中ol.tmpl
为t.tmpl
里声明的tmpl
.
t.tmpl
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>tmpl test</title>
</head>
<body>
<h1>测试嵌套template语法</h1>
<p>Name: {{.Name}}</p>
<p>Gender: {{.Gender}}</p>
<p>Age: {{.Age}}</p>
<hr>
{{template "ul.tmpl"}}
<hr>
{{template "ol.tmpl"}}
</body>
</html>
{{ define "ol.tmpl"}}
<ol>
<li>吃饭</li>
<li>睡觉</li>
<li>打豆豆</li>
</ol>
{{end}}
ul.tmpl
<ul>
<li>注释</li>
<li>日志</li>
<li>测试</li>
</ul>
Golang程序
func tmplDemo( w http.ResponseWriter , r * http.Request ){
// 定义模板
// 解析模板
tmpl, err := template.ParseFiles("./t.tmpl", "./ul.tmpl")
if err != nil {
fmt.Println("create template failed, err:", err)
return
}
user := UserInfo{
Name: "小王子",
Gender: "男",
Age: 18,
}
tmpl.Execute(w, user)
}
上课笔记
template.ParseFiles("./t.tmpl", "./ul.tmpl")
解析时有先后顺序,从外到内