如何在 Gin 框架中正确加载 HTML 模板及关联的 CSS 样式表

浅芳君_8271

浅芳君_8271

2026-05-25

324人浏览

原创

Gin 默认不提供静态资源服务,需显式注册 Static 路由才能让浏览器访问 /css/index.css 等样式文件,否则将返回 404 错误。

gin 默认不提供静态资源服务,需显式注册 `static` 路由才能让浏览器访问 `/css/index.css` 等样式文件,否则将返回 404 错误。

在 Gin 中渲染 HTML 模板时,模板本身(如 index.tmpl.html)由 LoadHTMLFiles 或 LoadHTMLGlob 加载并用于服务端渲染,但其中引用的外部资源(如 CSS、JS、图片)属于客户端请求的静态文件,必须通过独立的静态文件路由处理——Gin 不会自动映射文件系统路径到 HTTP 路径。

你当前的目录结构是合理的:

workspace/
├── main/
│   └── main.go
└── templates/
    ├── index.tmpl.html
    └── css/
        └── index.css

但问题在于:HTML 中通过 @import url("/css/index.css") 发起的请求,需要 Gin 明确知道 /css/ 这个 URL 前缀应映射到本地 ../templates/css 目录。否则 Gin 无法响应该请求,导致 404。

✅ 正确做法是在 main.go 中添加静态文件路由:

html-to-pptx-converter
html-to-pptx-converter

使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。

下载
package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()

    // ✅ 加载 HTML 模板(仅用于服务端渲染)
    r.LoadHTMLFiles("../templates/index.tmpl.html")

    // ✅ 关键:注册静态资源路由,使 /css/* 请求映射到 ../templates/css 目录
    r.Static("/css", "../templates/css")

    // ✅ 定义页面路由
    r.GET("/index", func(c *gin.Context) {
        c.HTML(200, "index.tmpl.html", gin.H{
            "title": "Main website",
        })
    })

    r.Run(":8080")
}

? 注意事项:

  • r.Static(prefix, rootDir) 中的 prefix 是 URL 路径前缀(如 /css),rootDir 是 服务器本地文件系统路径(相对于执行目录,建议使用绝对路径或 filepath.Join() 提升可移植性);
  • CSS 文件路径在 HTML 中必须与 prefix 一致: 或 @import url("/css/index.css");
  • @import 写在