Revel模板错误页仅在dev模式下可见,需将conf/app.conf中run.mode设为dev并重启确保终端显示“Running in dev mode”,再通过模板语法错误(如单等号替代双等号)触发;错误页分三栏:左侧高亮源码行最可信,中间为Go原始报错,右侧调用栈中含app/views/xxx.html:nn的路径才是真实错误位置;务必执行revel clean清除tmp缓存,否则行号映射失准。

Revel模板错误页只在dev模式下可见
Revel的编译错误页(比如模板语法错、函数名拼错)根本不会在prod模式下出现——它直接返回500或空白,不输出任何线索。必须确认conf/app.conf里第一行是run.mode = dev,且重启后终端打印出Running in dev mode字样。否则你改了模板也看不到错误页,只能靠猜。
触发错误页要改模板源码,不是改Go代码
Revel的模板编译错误只发生在HTML模板解析阶段,和控制器Go逻辑无关。最稳的触发方式是在任意.html文件里写一个非法表达式:
- 把
{{if .User.Name == ""}}改成{{if .User.Name = ""}}(单等号) - 或者删掉
{{end}}导致括号不匹配 - 保存后刷新页面,立刻出现深色背景三栏错误页
注意:浏览器缓存会影响结果,硬刷(Ctrl+F5)或加?_t=123参数更可靠。
看懂错误页的三栏结构才能准确定位
错误页分左中右三栏,但中间栏的报错行号常不准——Revel会对模板做预处理(比如展开{{include}}、注入{{.flash}}),真实错误往往在高亮行的上一行或下一行。
- 左侧:出错模板的原始HTML,当前行已标红,这是最可信的位置
- 中间:Go编译器原始报错,如
expected '}' but found '=' - 右侧:调用栈,重点找含
app/views/xxx.html:123的那行,这才是真实模板位置
如果调用栈里全是runtime/asm_amd64.s或revel/template.go,说明错误已穿透到底层,别怀疑框架,回头再查你刚改的模板文件。
模板缓存不清理,错误页就永远不对
Revel把编译后的模板缓存在tmp/目录,旧缓存会覆盖新位置映射。哪怕你改对了模板,只要tmp/没清,错误页仍指向老行号。
- 执行
revel clean彻底删除tmp/目录 - 或手动删掉项目根目录下的
tmp/文件夹 - 再运行
revel run yourapp,此时错误页才真正反映最新修改
另外,conf/app.conf里设template.caching = false能避免改完HTML还得重启,但仅限开发期用——线上必须关掉,否则性能掉得厉害。











