Dan*_*ani 1 css go go-html-template
我在我的_base.html模板中有这样的bootstrap导航,如下所示:
<ul class="nav navbar-nav">
<li><a href="/" class="">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
使用Golang我想添加一个
class="active"
Run Code Online (Sandbox Code Playgroud)
到相应的列表项.
我读过的HTML /模板文件和类似物品thisone,但在我看来,我必须写一个golang功能,增加了
class="active"
Run Code Online (Sandbox Code Playgroud)
到每个对应的相应列表项.但不知怎的,我觉得如果我能添加类似的东西会更清洁
<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>
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我记得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")
Run Code Online (Sandbox Code Playgroud)
用法示例:
<li{{if eq .Active "index"}} class="active"{{end}}><a href="/">Home</a></li>
Run Code Online (Sandbox Code Playgroud)
但仅将其用于显示逻辑本身.将显示逻辑和实际计算分开是一个很好的做法.
如今,您不必实现自己的eq助手。它已经包含在模板包中。
<ul>
<li {{if eq .Active "info" }}class="active"{{end}}>
<a href="/info">{{.User.Info}}</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
现在使用匿名结构呈现此模板。
// get template from file
view := template.Must(template.ParseFiles(
"views/info.html",
"views/layout.html",
))
// render template with data in route handler
data := struct {
User *User // some custom struct with further details
Active string
}{
user, // a User instance
"info",
}
err = view.ExecuteTemplate(w, "layout", data)
check(err)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |