需显式注册 HTML 视图引擎:调用 iris.HTML("./views", ".html") 创建实例,设分隔符 tmpl.Delims("${", "}") 避免冲突,启用热重载 tmpl.Reload(true),最后必须 app.RegisterView(tmpl);渲染时用 ctx.ViewData() 传数据,模板中用 ${.key} 取值;静态资源需单独注册 app.HandleDir("/assets", iris.Dir("./assets"))。

必须显式注册 HTML 视图引擎,且模板路径、后缀、分隔符需手动指定;Iris 不会自动查找 index.html 或 fallback 到默认目录。
怎么配置 HTML 模板引擎
Iris 默认不启用任何模板引擎,ctx.View() 会 panic,除非你主动调用 app.RegisterView()。最常用的是内置的 html/template:
- 用
iris.HTML("./views", ".html")创建引擎实例,第一个参数是模板根目录(相对执行路径),第二个是文件后缀 - 建议立刻设置分隔符,避免和 Vue/React 冲突:
tmpl.Delims("${", "}") - 开发期开启热重载:
tmpl.Reload(true),否则改了模板要重启服务 - 最后一步必不可少:
app.RegisterView(tmpl),漏掉这句所有ctx.View()都无效
渲染时怎么传数据给模板
模板本身不支持函数调用或复杂逻辑,只做纯数据渲染。传值靠 ctx.ViewData() 或 ctx.ViewLayout():
-
ctx.ViewData("title", "首页")—— 传单个变量,模板里写${.title} -
ctx.ViewData("users", []User{{Name: "Alice"}})—— 传结构体切片,模板可用${range .users} ${.Name} ${end} - 若需统一 layout(如
layouts/main.html),先tmpl.AddFunc("render", ...)或用ctx.ViewLayout("main.html") - 注意:
ctx.ViewData()是 per-request 的,不会跨请求残留
静态资源和模板混用要注意什么
模板里引用的 CSS/JS 是前端加载的,和 Iris 模板渲染无关;但如果你用 ./assets 存放静态文件,必须单独注册路由:
立即学习“前端免费学习笔记(深入)”;
- 加这一行:
app.HandleDir("/assets", iris.Dir("./assets")),否则浏览器请求/assets/app.js会进 404 处理器 - 路径前缀
/assets必须和模板中写的<script src="/assets/app.js"></script>完全一致 - 别把
./views和./assets放同一个目录下——Iris 不会自动过滤,可能意外暴露模板源码 - 生产环境建议关掉
tmpl.Reload(true),避免每次请求都读磁盘
最容易被忽略的是:模板路径错误时 Iris 不报错,而是静默返回空内容或 panic;务必检查 ./views 目录是否存在、文件名是否带后缀、ctx.View("test.html") 中的字符串是否和磁盘文件名一字不差。


















