Fork me on GitHub

Gin框架系列之模板与静态文件

一、模板的使用

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")
}

 

posted @ 2022-04-09 12:16  iveBoy  阅读(1373)  评论(0编辑  收藏  举报
TOP