gin框架 HTML模板渲染

gin 支持加载 HTML 模板, 然后根据模板参数进行配置并返回相应的数据,本质上就是字符串替换 LoadHTMLGlob() 方法可以加载模板文件。

 

1. 正常模式 HTML 模板渲染

例如:main.go 文件如下:

package main

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

func main() {
    engine := gin.Default()
    engine.LoadHTMLGlob("tem/*")
    engine.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK, "index.html", gin.H{"title": "我是测试", "ce": "123456"})
    })
    engine.Run()
}

index.html 模板如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{.title}}</title>
</head>
    <body>
        fgkjdskjdsh{{.ce}}
    </body>
</html>

文件目录结构如下:

    test
    ├── go.mod
    ├── go.sum
    ├── main.go
    └── tem
        └── index.html

 

2. 多层目录 HTML 模板渲染

如果你的目录结构是下面的情况:

    test
    ├── go.mod
    ├── go.sum
    ├── main.go
    └── tem
        └── user
            └── index.html

go 文件代码如下:

package main

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

func main() {
    engine := gin.Default()
    engine.LoadHTMLGlob("tem/**/*")
    engine.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK, "user/index.html", gin.H{"title": "我是测试", "address": "www.5lmh.com"})
    })
    engine.Run()
}

html 文件代码如下:

{{ define "user/index.html" }}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{.title}}</title>
</head>

<body>
    fgkjdskjdsh{{.address}}
</body>

</html>
{{ end }}

 

3. 头尾分离模式 HTML 模板渲染

如果你想进行头尾分离就是下面这种写法:

go 文件代码如下:

package main

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

func main() {
    engine := gin.Default()
    engine.LoadHTMLGlob("tem/**/*")
    engine.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK, "user/index.html", gin.H{"title": "我是测试", "address": "www.5lmh.com"})
    })
    engine.Run()
}

user/index.html文件代码如下:

{{ define "user/index.html" }}
{{template "public/header" .}}
fgkjdskjdsh{{.address}}
{{template "public/footer" .}}
{{ end }}

public/header.html文件代码:

{{define "public/header"}}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{.title}}</title>
</head>

<body>

{{end}}

public/footer.html文件代码:

    {{define "public/footer"}}
    </body>
    </html>
{{ end }}

 

4. 引入静态文件

如果你需要引入静态文件需要定义一个静态文件目录

engine.Static("/assets", "./assets")

HTTP 是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出。cookie 就是解决 HTTP 协议无状态的方案之一。cookie 实际上就是服务器保存在客户端浏览器的一段信息。浏览器有了 cookie 之后,每次向服务器发送请求时都会同时将该信息发送给服务器,服务器收到请求后,就可以根据该信息处理请求。gin 框架提供了 cookie 操作的支持。