我的 _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/