Передать текущий маршрут в шаблон
Я играю с Голангом уже пару недель, и недавно начал изучать структуру игры.
На других языках / платформах, которые я использовал, всегда можно было проверить, какой текущий маршрут находится внутри шаблона. Что-то, что помогло мне сохранить такие вещи, как навигация, в отдельном файле шаблона, и просто сделать это:
<!-- 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
}
Это работает нормально, но кажется немного хакерским. Я думаю, что, возможно, мне не хватает чего-то действительно очевидного, что позволило бы мне зарезервировать функциональные перехватчики на тот случай, когда они мне действительно нужны.
Таким образом, вопрос прост: как правильно и наиболее надежно выяснить, что представляет собой текущее действие в шаблоне?