Iris模板引擎需配置三处:路径注册(显式指定目录和后缀)、分隔符避让(如tmpl.Delims("${","}")防Vue冲突)、静态资源分离(用HandleDir挂载);缺一即导致静默失败或404。

Iris 模板引擎配置不是“装完就用”,关键在三处:路径注册、分隔符避让、静态资源分离——漏掉任一环节,ctx.View 会静默失败或和前端框架(如 Vue)冲突。
模板目录和后缀必须显式传给 iris.HTML
不能只写 iris.HTML("./views"),Iris 不会自动猜后缀。后缀缺失会导致 ctx.View("index.html") 找不到文件,返回 404 且无提示。
- 正确写法:
tmpl := iris.HTML("./views", ".html"),其中"./views"是相对项目根目录的路径,".html"必须带点 - 目录需手动创建:
mkdir views,Iris 不会自动建目录 - 模板文件名必须含后缀,且和
iris.HTML第二个参数严格一致;改用.tmpl就得同步改参数
必须调用 Delims 避开 Vue/React 的 {{}}
默认用 {{}},和 Vue 的插值语法完全重叠,模板渲染时会被前端框架二次解析,导致变量显示为原始字符串(如 {{.message}} 直接上屏)。
- 立即设置:
tmpl.Delims("${", "}")或tmpl.Delims("[[", "]]") - 这个调用必须在
app.RegisterView(tmpl)之前,否则无效 - 不设分隔符时,
ctx.ViewData("x", "y")仍能传值,但模板里写{{.x}}就不会被 Iris 解析
静态资源不能靠模板路径“顺带”服务
很多人以为把 CSS/JS 放进 ./views 就能加载,其实 iris.HTML 只管渲染,不提供 HTTP 文件服务。浏览器直接 404。
- 单独挂载静态目录:
app.HandleDir("/assets", iris.Dir("./assets")) -
/assets是 URL 前缀,./assets是磁盘路径,两者可不同名,但必须显式声明 - HTML 中引用要匹配前缀:
<link href="/assets/css/main.css" rel="stylesheet">,不能写./css/...或../assets/... - 别用
app.StaticWeb(已弃用),新版 Iris 只认HandleDir
模板中访问数据要区分 . 和 $
Iris 使用 Go 标准库 html/template,其作用域规则和常见前端模板不同,容易取错值。
-
{{.message}}访问ctx.ViewData("message", ...)传入的顶层字段 -
{{$.Title}}才能访问ctx.ViewData("Title", ...),因为.在range或嵌套 block 里会变作用域,$始终指最外层数据 - 结构体字段必须首字母大写(导出),
{{.User.name}}会为空,得写{{.User.Name}} - 没传值的 key 渲染为空字符串,不报错,调试时建议加
{{if .message}}{{.message}}{{else}}MISSING{{end}}
最易被忽略的是:模板修改后默认不热重载,tmpl.Reload(true) 必须显式开启,否则改了 HTML 文件也要重启进程;而这个调用一旦漏掉,开发体验会断崖式下降——你改了十次,页面还是旧的,却找不到原因。


















