Skip to content

在 Go 中,使用 Gin 框架处理模板渲染(HTML)非常简单。Gin 本身并不提供模板引擎,而是与 Go 标准库中的 html/template 或第三方库(如 pughandlebars)结合使用。以下是如何在 Gin 中设置和使用模板的详细示例。

1. 安装 Gin

首先,确保你安装了 Gin 框架。使用以下命令安装:

bash
go get github.com/gin-gonic/gin

2. 设置模板目录

Gin 默认支持 html/template,但你可以将任何模板引擎与其结合使用。为了展示简单的模板渲染,以下示例将使用 html/template

2.1 项目目录结构

假设你的项目结构如下:

/your_project
  /templates
    index.html
  main.go

index.html 是我们的模板文件。

2.2 模板文件

templates/index.html 文件中,可以创建简单的 HTML 文件,如下所示:

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gin Template Example</title>
</head>
<body>
    <h1>{{.Title}}</h1>
    <p>{{.Message}}</p>
</body>
</html>

2.3 Gin 服务器代码

main.go 中,配置 Gin 使用模板引擎,加载模板并渲染页面。

go
package main

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

func main() {
	// 创建 Gin 引擎
	r := gin.Default()

	// 设置模板目录和模板文件扩展名
	r.LoadHTMLGlob("templates/*")

	// 路由处理
	r.GET("/", func(c *gin.Context) {
		// 渲染模板
		c.HTML(http.StatusOK, "index.html", gin.H{
			"Title":   "Welcome to Gin Template",
			"Message": "This is a simple example of template rendering in Gin!",
		})
	})

	// 启动服务器
	log.Fatal(r.Run(":8080"))
}

3. 代码详解

  • r.LoadHTMLGlob("templates/*"):这行代码告诉 Gin 框架从 templates/ 目录加载所有的 .html 模板文件。
  • r.GET("/", func(c *gin.Context) {...}):定义根路径 (/) 的路由处理函数。当访问 / 路径时,Gin 会渲染 index.html 模板。
  • c.HTML(http.StatusOK, "index.html", gin.H{...}):将模板渲染到 HTTP 响应中。gin.H 是一个快捷方式,相当于 map[string]interface{},它传递给模板的数据。

4. 运行和访问

  1. 运行 Go 应用
bash
go run main.go
  1. 访问页面

打开浏览器并访问 http://localhost:8080,你将看到渲染的 HTML 页面,页面显示了 TitleMessage

5. 模板中的动态内容

你可以在模板中传递各种类型的数据,例如数组、切片、结构体等。以下是传递结构体的一个例子:

5.1 结构体示例

假设你有一个结构体:

go
type PageData struct {
	Title   string
	Message string
}

然后,在路由处理函数中,传递结构体数据:

go
r.GET("/", func(c *gin.Context) {
	data := PageData{
		Title:   "Gin Template Example",
		Message: "This message is rendered using a struct!",
	}

	c.HTML(http.StatusOK, "index.html", data)
})

5.2 更新模板

index.html 模板可以与之前的结构体数据一起渲染:

html
<h1>{{.Title}}</h1>
<p>{{.Message}}</p>

这样,你就可以传递一个更复杂的数据结构到模板中。

6. 静态文件和模板一起使用

如果你的应用中包含静态文件(如 CSS、JavaScript、图片等),你可以通过 GinStatic 路由功能来服务这些静态文件。

6.1 静态文件目录

假设你有一个 static 目录,其中包含 CSS 文件,例如 style.css

/your_project
  /static
    style.css
  /templates
    index.html
  main.go

6.2 配置静态文件路由

main.go 中,使用 r.Static 来服务静态文件:

go
r.Static("/static", "./static")

这行代码将使得浏览器可以通过访问 http://localhost:8080/static/style.css 来加载 style.css 文件。

7. 总结

  • Gin 支持模板引擎:Gin 使用 Go 的 html/template 来渲染 HTML 模板。
  • 模板传递数据:使用 gin.H 或自定义结构体来传递数据给模板。
  • 静态文件支持:通过 r.Static 可以轻松服务静态文件(如 CSS、JS 文件)。
  • 动态内容渲染:你可以将动态内容传递给模板并进行渲染。

这样就完成了一个基本的 Gin 模板应用,您可以根据自己的需要进行扩展和修改。