gin模板渲染必须用文件名而非路径,如c.html(200, "profile.html", data);同名模板需通过{{define}}显式命名并配合multitemplate管理;嵌套模板仅支持{{template}}而非{{include}};静态资源须独立挂载r.static()。

模板路径匹配必须用文件名,不是相对路径
很多人写 c.HTML(200, "user/profile.html", data) 却报错 “template not found”,其实是因为 Gin 的模板注册机制只认文件名,不认目录结构。你模板文件放在 templates/user/profile.html,注册时它被当作模板名 "profile.html" 存入引擎,而不是 "user/profile.html"。
所以正确写法是:
- 确保
r.LoadHTMLGlob("templates/**/*")已执行(在路由注册前) - 模板文件实际路径可以是
templates/admin/dashboard.html、templates/blog/post.html - 但渲染时第二个参数必须填
"dashboard.html"或"post.html",不能带子目录 - 如果多个模板同名(比如两个
index.html),Gin 会覆盖,后加载的生效 —— 这是隐式冲突点
多模板共存需靠目录隔离 + 命名唯一
想让 admin/index.html 和 web/index.html 同时可用,不能依赖路径,得靠模板 define 显式命名。否则 LoadHTMLGlob 加载时两个同名文件会互相覆盖。
做法是:每个模板开头加 {{define "admin/index.html"}},结尾加 {{end}};然后用 LoadHTMLFiles 或自定义 multitemplate 加载并注册这些带命名的模板。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
LoadHTMLFiles不解析define,只按文件路径注册,所以不适合多层同名场景 - 推荐用
github.com/gin-contrib/multitemplate,它支持从define提取模板名,再绑定到完整路径字符串(如/admin/index.html) - 注意:此时
c.HTML(200, "/admin/index.html", data)中的路径是模板名,不是磁盘路径 —— 它由AddFromFilesFuncs注册时指定
嵌套模板(layout + content)必须用 template 调用,不是 include
Gin 没有 {{include}} 指令,只有 {{template "name" .}}。如果你写了 {{include "header.html" .}},会直接 panic:“function \"include\" not defined”。
正确做法是:
- 主布局
templates/layout.html里定义:{{define "layout"}}...{{template "content" .}}... - 子模板
templates/home.html里写:{{define "content"}}<h1>Hello</h1>{{end}} - 渲染时仍调用
c.HTML(200, "home.html", data)—— Gin 会自动找define "content"并注入到layout的template占位处 - 所有参与继承的模板都必须用
define命名,且名字不能重复;未被template调用的define块会被忽略
静态资源和模板路径容易混淆,但它们完全独立
有人把 CSS/JS 放进 templates/ 目录,然后在 HTML 里写 <link href="/templates/css/app.css"> —— 这肯定 404。Gin 的模板加载和静态文件服务是两套系统。
-
LoadHTMLGlob只读取模板文件,不提供 HTTP 访问 - 静态资源要用
r.Static("/static", "./static")显式挂载,然后前端引用/static/css/app.css - 模板中路径写死(如
/static/)没问题,但别误以为templates/下的文件能被浏览器直接请求 - 编译成二进制后,
templates/必须和可执行文件同级;而static/也一样 —— 工作目录决定一切,不是源码位置
define 划清边界,用 template 建立调用链,再靠 multitemplate 或手动 LoadHTMLFiles 控制注册粒度。漏掉任意一环,页面就空白或 panic。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










