一、模板的使用
1、加载模板路径
当使用gin.Default方法创建一个router后需要加载模板路径,加载的方法可以使用:
-
LoadHTMLGlob 只有一个参数,通配符,如:router.LoadHTMLGlob("templates/*"),查找当前项目路径下template文件夹下所有的html文件
- LoadHTMLFiles 不定长参数,可以传多个字符串,如:router.LoadHTMLFiles("template/index.html","template/user.html"),指定所有要使用的html文件路径
推荐使用LoadHTMLGlob ,如果存在多级目录可以这样指定:
两级:engine.LoadHTMLGlob("templates/**/*") 三级:engine.LoadHTMLGlob("templates/**/**/*") ...
2、挂载路由
router.GET("/index", Hello)
3、编写视图函数
func Hello(ctx *gin.Context) { ctx.HTML(http.StatusOK, "home/index.html","hello home!") }
在试图函数中指定模板路径以及渲染到前端的数据。
4、模板文件编写
在项目的template目录下新建home目录然后新建index.html文件:
{{ define "home/index.html"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/css/index.css"> </head> <body> <div class="content">{{ . }}</div> </body> </html> {{ end }}
对于二级以及多级目录需要在文件开头通过define指定文件的路径,否则程序识别不到。
5、启动程序
func main() { router := gin.Default() // 加载模板路径 router.LoadHTMLGlob("template/**/*") router.GET("/index", Hello) router.Run(":8080") }
通过router.Run方法启动,注意不要在IDE中启动,通过cmd窗口的方式,否则模板找不到。
二、静态文件的使用
当使用html时,难免使用到css、js、images等,此时需要一种方式进行引入。
1、加载静态文件
func main() { router := gin.Default() // 加载模板路径 router.LoadHTMLGlob("template/**/*") // 加载静态文件,注意第一个路径参数映射第二个目录参数,所以第一个参数可以随意,但是在html中引入时需要与其保持一致 router.Static("/static", "static") router.GET("/index", Hello) router.Run(":8080") }
2、模板中引入
{{ define "home/index.html"}} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/css/index.css"> </head> <body> <div class="content">{{ . }}</div> </body> </html> {{ end }}
三、项目说明
1、项目结构
demo01
│ main.go
│ README.md
│
├─static
│ ├─css
│ │ index.css
│ │
│ ├─images
│ └─js
└─template
├─goods
│ goods.html
│
├─home
│ index.html
│
└─order
order.html
2、主要文件说明
- main.go
package main import ( "github.com/gin-gonic/gin" "net/http" ) func Hello(ctx *gin.Context) { ctx.HTML(http.StatusOK, "home/index.html","hello home!") } func main() { router := gin.Default() // 加载模板路径 二级目录 router.LoadHTMLGlob("template/**/*") // 加载静态文件 router.Static("/static", "static") router.GET("/index", Hello) router.Run(":8080") }