Beego默认使用html/template引擎,无需额外配置;模板默认位于views/目录,按views/控制器名/方法名.tpl路径查找,支持手动指定TplName、自定义后缀、修改视图路径及关闭自动渲染。

Beego 默认就用 html/template 渲染页面,不需要额外安装或配置模板引擎,只要路径、后缀、上下文三者对得上,就能跑起来。
模板文件放哪、叫什么名、怎么被找到
Beego 默认在 views/ 目录下找模板,查找逻辑是:views/Controller名/方法名.tpl(比如 MainController.Get 会默认找 views/main/get.tpl)。你也可以手动指定:
-
this.TplName = "user/profile.html"—— 路径相对于views/,支持.html、.tpl,其他后缀需提前注册:beego.AddTemplateExt("gohtml") - 如果没设
TplName且AutoRender = true(默认开启),就会按控制器+方法名自动拼路径 -
beego.SetViewsPath("templates")可改根目录,但别和静态文件路径冲突
{{.FieldName}} 渲染数据时,点号(.)到底指谁
模板里所有 {{.xxx}} 的 . 指的是当前传入的上下文对象,也就是 c.Data 里的值。它不是“当前 struct”,而是你塞进 Data 的那个值本身:
-
c.Data["User"] = User{Name: "Alice"}→ 模板里写{{.User.Name}}才能取到 -
c.Data["User"] = &User{Name: "Alice"}→ 同样写{{.User.Name}},Go 模板会自动解引用 - 如果直接
c.Data["Name"] = "Alice",那模板里就得写{{.Name}},不能多加一层 - 想访问根级上下文(比如跨嵌套模板保持一致),可用
{{$}},但多数情况用不到
用 {{template}} 复用局部模板,路径和上下文容易错
Beego 没有 partial 关键字,全靠 Go 原生 {{template "name" .arg}} 实现复用。常见坑在路径和参数传递:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
立即学习“前端免费学习笔记(深入)”;
- 路径是相对于
views/的完整路径,比如{{template "base/header.tpl" .}},不能写成./header.tpl或base/header.tpl(缺前导views/) -
.表示把当前整个Data传进去;如果只传子结构(如.User),局部模板里就得直接用{{.Name}},而不是{{.User.Name}} - 局部模板文件名建议以下划线开头(如
_form.tpl),语义上表明它不单独渲染,避免误访问 - 多个局部模板之间不要互相
{{template}}循环引用,Go 模板不报错但会无限递归卡死
Layout 布局怎么生效,为什么 {{.LayoutContent}} 必须写
启用 Layout 不是靠模板语法,而是 Controller 层显式赋值:this.Layout = "base.html"。关键点在于:base.html 里必须有 {{.LayoutContent}} 这个固定标识,否则中间内容不会插入:
-
this.Layout = "layouts/base.html"+this.TplName = "user/index.tpl"→ Beego 把user/index.tpl渲染结果作为字符串,赋给.LayoutContent,再整体渲染base.html -
.LayoutContent是硬编码变量名,不能改成.Body或其他,否则空白 - 如果用了
LayoutSections(如Header、Footer),对应部分模板也必须存在,且路径要和LayoutSectionsmap 中的值完全一致 - Layout 模板里不能再嵌套另一个
Layout,Beego 不支持多层 layout 嵌套
最容易被忽略的是:模板路径拼写错误和上下文层级错位——一个 . 多了或少了,整个字段就取不到;{{template}} 的路径少写一个目录,运行时不报错但内容为空。调试时先 fmt.Printf 打印 c.Data 结构,再对照模板里的点号链,比猜快得多。

















