1、加载模板
模板目录是一级目录
r := gin.Default()
r.LoadHTMLGlob("../../templates/frontend/*")
//分配模板
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"message": "test",
"time": time.Now().Unix(), //分配时间戳到模板
})
})
如果是一级目录,模板可以不需要声明,例如index.html,也可以不声明,模板包含的文件header.html同理。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{{template "header.html" .}}
</head>
<body>
<div>frontend</div>
<div>时间 :{{UnixToTime .time}}</div>
</body>
</html>
声明
{{define "index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{{template "header.html" .}}
</head>
<body>
<div>frontend</div>
<div>时间 :{{UnixToTime .time}}</div>
</body>
</html>
{{end}}
模板目录是二级目录。
r := gin.Default()
r.LoadHTMLGlob("../../templates/admin/**/*")
//分配模板
r.GET("/admin", func(c *gin.Context) {
c.HTML(http.StatusOK, "index/index.html", gin.H{
"message": "test",
})
})
如果是多级目录,模板需要声明,例如index.html,模板包含的文件header.html,同理也需要声明。
{{define "index/index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{{template "common/header.html" .}}
</head>
<body>
<div>admin</div>
</body>
</html>
{{end}}
2、加载静态资源
具体静态资源存放路径参考下面demo
r := gin.Default()
r.Static("/static", "../../templates/assets/frontend")
3、模板使用
循环遍历
//定义结构体
type Test struct {
Name string
Age int8
}
var AssignTest []Test
//分配变量给模板
assignTest := append(AssignTest, Test{Name: "test", Age: 10}, Test{Name: "test1", Age: 20})
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"assignTest": assignTest,
})
})
模板遍历
{{range $index,$value := .assignTest}}
<div>名字 :{{$value.Name}},年龄:{{$value.Age}}</div>
{{end}}
条件判断
4、自定义模板函数
定义处理时间函数
func UnixToTime(timestamp int64) string {
t := time.Unix(timestamp, 0)
return t.Format("2006-01-02 15:04:05")
}
入口处理
r := gin.Default()
//自定义模板函数 注意要把这个函数放在加载模板前
r.SetFuncMap(template.FuncMap{
"UnixToTime": tools.UnixToTime,
})
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"message": "test",
"time": time.Now().Unix(), //分配时间戳到模板
})
})
模板index.html里面使用
<div>时间 :{{UnixToTime .time}}</div>
demo地址
https://github.com/iamzcr/my-stacklifes/tree/main/test_template
demo项目目录树
test_template
├── README.md
├── go.mod
├── go.sum
├── main.go
├── cmd
│ ├── admin
│ │ └── main.go
│ └── frontend
│ └── main.go
├── templates
│ ├── admin
│ │ ├── common
│ │ │ └── header.html
│ │ └── index
│ │ └── index.html
│ ├── assets
│ │ ├── admin
│ │ │ └── css
│ │ │ └── style.css
│ │ └── frontend
│ │ └── css
│ │ └── style.css
│ └── frontend
│ ├── header.html
│ └── index.html
└── tools
└── tools.go