使用 LoadHTMLGlob() 或者 LoadHTMLFiles()
首先我们的目录结构如下
package main
import "net/http"import "github.com/gin-gonic/gin"
func main() { router := gin.Default() //加载templates目录下面所欲的文件 router.LoadHTMLGlob("templates/*") router.GET("/", func(c *gin.Context) { //定义模板,并给模板赋值 c.HTML(http.StatusOK, "index.html", gin.H{ "title": "gin框架之HTML模板渲染", }) }) router.Run(":8080")}
模板内容如下
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>{{.title}}</title></head><body><html><h1> {{ .title }}</h1></html></body></html>
分目录加载模板
分级加载就需要给每个模板定义名称
package main
import "net/http"import "github.com/gin-gonic/gin"
func main() { router := gin.Default() //templates/**/* 表示加载templates的子目录下的文件 router.LoadHTMLGlob("templates/**/*") router.GET("/a", func(c *gin.Context) { //定义模板,并给模板赋值 c.HTML(http.StatusOK, "a", gin.H{ "title": "gin框架之HTML模板渲染-a", }) }) router.GET("/b", func(c *gin.Context) { //定义模板,并给模板赋值 c.HTML(http.StatusOK, "b", gin.H{ "title": "gin框架之HTML模板渲染-b", }) }) router.Run(":8080")}
a.html
{{/*定义模板名称为a*/}}{{define "a"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{.title}}</title> </head> <body> <html> <h1> {{ .title }} </h1> </html> </body> </html>{{end}}
b.html
{{/*定义模板名称为b*/}}{{define "b"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{.title}}</title> </head> <body> <html> <h1> {{ .title }} </h1> </html> </body> </html>{{end}}
我们才用define的方式定义了模板名称,加载模板的时候我们可以直接写模板的名称。例如
//加载名称为a的模板,并给模板赋值 c.HTML(http.StatusOK, "a", gin.H{ "title": "gin框架之HTML模板渲染-a", })
你可以使用自定义的 html 模板渲染
import "html/template"
func main() {
router := gin.Default()
html := template.Must(template.ParseFiles("file1", "file2"))
router.SetHTMLTemplate(html)
router.Run(":8080")
}
你可以使用自定义分隔
r := gin.Default()
r.Delims("{[{", "}]}")
r.LoadHTMLGlob("/path/to/templates")
package main
import ( "html/template" "net/http")import "github.com/gin-gonic/gin"
func myFunc(s string) string { return s + "myFunc"}func main() { router := gin.Default() //给模板添加自定义函数 router.SetFuncMap(template.FuncMap{ "myFunc": myFunc, }) //templates/**/* 表示加载templates的子目录下的文件 router.LoadHTMLGlob("templates/**/*") router.GET("/a", func(c *gin.Context) { //加载名称为a的模板,并给模板赋值 c.HTML(http.StatusOK, "a", gin.H{ "title": "gin框架之HTML模板渲染-a", }) }) router.GET("/b", func(c *gin.Context) { //定义模板,并给模板赋值 c.HTML(http.StatusOK, "b", gin.H{ "title": "gin框架之HTML模板渲染-b", }) }) router.GET("/func", func(c *gin.Context) { //定义模板,并给模板赋值 c.HTML(http.StatusOK, "func", gin.H{ "title": "gin框架之HTML模板渲染- ", }) }) router.Run(":8080")}
模板调用自定义函数
{{/*定义模板名称为func*/}}{{define "func"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{{.title}}</title> </head> <body> <html> <h1>{{/* 调用自定义函数*/}} {{ .title|myFunc }} </h1> </html> </body> </html>{{end}}
运行结果
gin框架之HTML模板渲染- myFunc