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
下载
使用 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 写在
