我已经玩了几个星期的 golang,最近开始研究 revel 框架。
在我使用过的其他语言/框架中,始终可以从模板中检查当前路线。这让我更容易将导航等内容保存在单独的模板文件中,然后执行以下操作:
<!-- in header template -->
<ul class="nav">
{{ if eq .req.action "App.Index" }}
<li class="active"><a href="#">
{{ else }}
<li><a href="{{url "App.Index" }}">
{{end}}
Home</a></li>
<!-- other links here -->
</ul>
这不是我正在编写的实际代码,但我希望这可以清楚地说明这个想法是什么:有一个方便的导航模板,并根据当前的操作设置类/链接。
在浏览了源代码和一些 golang 模板示例之后,我看不出当前操作或其他任何内容暴露给模板的任何方式。
为了解决这个问题,我目前正在使用一个 func 拦截器,它会自动为我设置一个渲染参数:
func prependRoute(c *revel.Controller) revel.Result {
c.RenderArgs["_current_route"] = c.Action
return nil
}
这工作正常,但感觉有点hacky。我想我可能遗漏了一些非常明显的东西,可以让我在真正需要它们时保留 func 拦截器。
那么问题就很简单了:在一个 revel 模板中找出当前动作是什么的正确、最可靠的方法是什么?