2

我已经玩了几个星期的 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 模板中找出当前动作是什么的正确、最可靠的方法是什么?

4

0 回答 0