gin 模板渲染

Gin 框架默认封装了golang内置的html/template包用于处理html模版,如果你开发的是接口服务,不提供html页面可以跳过本章内容。

前置技术知识点:

1.返回html结果的例子

func main() {
        // 初始化gin对象
	router := gin.Default()
        // 首先加载templates目录下面的所有模版文件,模版文件扩展名随意
	router.LoadHTMLGlob("templates/*")

        // 绑定一个url路由 /index
	router.GET("/index", func(c *gin.Context) {
                // 通过HTML函数返回html代码
                // 第二个参数是模版文件名字
                // 第三个参数是map类型,代表模版参数
                // gin.H 是map[string]interface{}类型的别名
		c.HTML(http.StatusOK, "index.html", gin.H{
			"title": "Main website",
		})
	})
        // 启动http服务,并且绑定在8080端口
	router.Run(":8080")
}

模版代码

文件名:templates/index.html

<html>
	<h1>
		{{ .title }}
	</h1>
</html>

2.处理模版子目录的情况

一般在项目中,因为有多个模块的模版文件,我们都会以多个子目录的方式来组织模版文件,上面的例子只能加载某个目录下面的模版文件,无法加载子目录的模版文件。

例子:

func main() {
	router := gin.Default()
        // 加载templates目录下面的所有模版文件,包括子目录
       // **/* 代表所有子目录下的所有文件
	router.LoadHTMLGlob("templates/**/*")

	router.GET("/posts/index", func(c *gin.Context) {
                // 子目录的模版文件,需要加上目录名,例如:posts/index.tmpl
		c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
			"title": "Posts",
		})
	})
	router.GET("/users/index", func(c *gin.Context) {
                // 子目录的模版文件,需要加上目录名,例如:users/index.tmpl
		c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
			"title": "Users",
		})
	})
	router.Run(":8080")
}

模版文件:templates/posts/index.tmpl

{{ define "posts/index.tmpl" }}
<html><h1>
	{{ .title }}
</h1>
<p>Using posts/index.tmpl</p>
</html>
{{ end }}

模版文件:templates/users/index.tmpl

{{ define "users/index.tmpl" }}
<html><h1>
	{{ .title }}
</h1>
<p>Using users/index.tmpl</p>
</html>
{{ end }}