基于加载模板的 css 类

标签 css go go-html-template

我的 _base.html 模板中有这样的引导导航:

<ul class="nav navbar-nav">
   <li><a href="/" class="">Home</a></li>
   <li><a href="/blog/">Blog</a></li>
</ul>

我想使用 Golang 添加一个

class="active"

对应的列表项。

我读过 html/template文档和文章,如 thisone ,但在我看来,我必须编写一个 golang 函数来添加

class="active"

到每个对应的对应列表项。但不知何故,我仍然认为如果我可以添加像

这样的东西会更干净
<ul>
    <li{{ if .template = "index.html" }} class="active"{{ end }}><a href="/">Home</a></li>
    <li{{ if .template = "blog.html" }} class="active"{{ end }}><a href="/blog/">Blog</a></li>
</ul>

或类似的东西。我记得 Rob Pike 说过 Golang 应该为你做所有的计算,但为什么在 html/template-package 中有一个“if”语句?

最佳答案

我个人经常为这样的任务实现一个小的 eq 助手:

var tmpl = template.Must(template.New("").Funcs(template.FuncMap{
    "eq": func(a, b interface{}) bool {
        return a == b
    },
}).ParseGlob("templates/*.html")

示例用法:

<li{{if eq .Active "index"}} class="active"{{end}}><a href="/">Home</a></li>

但它仅用于显示逻辑本身。将显示逻辑和实际计算分开是一个很好的做法。

关于基于加载模板的 css 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352192/

相关文章:

json - 不调用 Go json Unmarshaller

go - 我如何在一个处理程序中更多地使用 http.Request?

css - 向下滑动动画 Angular 4

css - 通用选择器 * 和伪元素

jquery - fancybox-2 水平滚动条关闭

templates - 在 go html 模板中创建循环的最佳方法是什么?

go - 在 `{{ template }}` 中使用 Go Template var

css - 如何让 ExtJS ComboBox 与文本内联显示?

pointers - 如何在使用反射时设置标签

Go Webapp 的 Dockerfile 目录结构