You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang Gin框架模板继承报错:找不到base模板

解决Gin框架中模板继承找不到"base"模板的问题

问题核心原因

两次调用LoadHTMLGlob会覆盖之前的模板集合,导致布局模板(base.layout.html)和页面模板(home.page.html)不在同一个模板命名空间里,页面模板无法找到名为"base"的模板定义。

解决方案

1. 合并模板加载

用一次LoadHTMLGlob递归加载所有模板文件,确保所有模板被纳入同一个集合:

r.LoadHTMLGlob("templates/**/*.html")

这个匹配模式会加载templates目录下所有子文件夹(包括layouts和pages)中的所有.html文件。

2. 确保模板定义规范

  • 布局模板(templates/layouts/base.layout.html):必须用define声明模板块,并预留内容填充区域:
{{define "base"}}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>{{.Title}}</title>
</head>
<body>
    <header>网站头部</header>
    <main>
        {{block "content" .}}{{end}} <!-- 预留内容块 -->
    </main>
    <footer>网站底部</footer>
</body>
</html>
{{end}}
  • 页面模板(templates/pages/home.page.html):先继承基础模板,再定义填充内容的块:
{{template "base" .}} <!-- 继承base模板 -->

{{define "content"}}
<h1>欢迎来到首页</h1>
<p>这是首页的自定义内容</p>
{{end}}

3. 完整Gin路由示例

package main

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

func main() {
    r := gin.Default()
    // 一次性加载所有模板文件
    r.LoadHTMLGlob("templates/**/*.html")

    r.GET("/", func(c *gin.Context) {
        c.HTML(200, "home.page.html", gin.H{
            "Title": "首页",
        })
    })

    r.Run(":8080")
}

关键注意事项

  • 绝对不要拆分调用LoadHTMLGlob,后一次调用会完全替换前一次加载的模板集合,导致之前的模板丢失。
  • 确认模板文件路径和LoadHTMLGlob的匹配模式一致,避免漏加载模板文件。

内容的提问来源于stack exchange,提问作者Sujan Gainju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:10:00