优秀的编程知识分享平台

网站首页 > 技术文章 正文

Go Web 框架 Gin 学习2 - 模板渲染的2种方式

nanyue 2024-10-21 06:21:21 技术文章 7 ℃


1、LoadHTMLGlob

engine.LoadHTMLGlob("template1/*")

	func (engine *Engine) LoadHTMLGlob(pattern string)


LoadHTMLGlob有1个参数,可以使用通配符,用于加载HTML模板文件,"template1/*"表示template1目录下的所有文件。

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

func main() {
   engine := gin.Default()
   engine.LoadHTMLGlob("template1/*")
   engine.GET("/html1", html1)
   _ = engine.Run("127.0.0.1:80")
}

func html1(c *gin.Context) {
   c.HTML(http.StatusOK, "index1", nil)
}

模板文件内容如下:

{{define "index1"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>template1/index.html</h1>
</body>
</html>
{{end}}

2、LoadHTMLFiles

engine.LoadHTMLFiles("template1/index.html")

	func (engine *Engine) LoadHTMLFiles(files ...string)

LoadHTMLFiles的参数为不定长参数,传入单个字符类型的文件名

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

func main() {
   engine := gin.Default()
   engine.LoadHTMLFiles("template2/index.html")
   engine.GET("/html2", html2)
   _ = engine.Run("127.0.0.1:80")
}

func html2(c *gin.Context) {
   c.HTML(http.StatusOK, "index2", nil)
}

模板文件如下:

{{define "index2"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>template2/index.html</h1>
</body>
</html>
{{end}}

3、注意:

LoadHTMLGlob和LoadHTMLFiles只能使用一次,以最后一次的调用为准

例如:先调用LoadHTMLGlob,然后调用LoadHTMLFiles,那么LoadHTMLGlob就失效,LoadHTMLFiles生效。

可能报错:html/template: "index2" is undefined,模板未定义。

因此,通常建议使用LoadHTMLGlob。

当然也可以迭代文件夹下的所有文件,然后生成数组,然后传入LoadHTMLFiles的不定参数,这样也可以实现相似效果。

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

func main() {
   engine := gin.Default()
   engine.LoadHTMLGlob("template1/*")
   engine.LoadHTMLFiles("template2/index.html")
   engine.GET("/html1", html1)
   engine.GET("/html2", html2)
   _ = engine.Run("127.0.0.1:80")
}

func html2(c *gin.Context) {
   c.HTML(http.StatusOK, "index2", nil)
}

func html1(c *gin.Context) {
   c.HTML(http.StatusOK, "index1", nil)
}

Tags:

最近发表
标签列表