使用模板内的条件
if语句在模板中的使用真的令我困惑。
我试图在golang模板制作的导航列表中放入class = "active"
,以执行检测活动选项卡的基本选项卡菜单。 这是我的尝试:
{{define "header"}}
<!DOCTYPE html>
<html>
<head>
<title>Geoprod</title>
{{template "stylesheet" .}}
</head>
<body>
<nav class="navbar" role="navigation">
<div class="navbar-header">
<a{{if eq .Active "accueil"}} class="active"{{end}} href="/">Geoprod</a>
</div>
<div class="navbar-body">
<ul class="navbar-list">
<li{{if eq .Active "societe"}} class="active"{{end}}><a href="/societe">Société</a></li>
<li{{if eq .Active "dossier"}} class="active"{{end}}><a href="/dossier">Dossier</a></li>
<li{{if eq .Active "temps"}} class="active"{{end}}><a href="/temps">Temps</a></li>
<li{{if eq .Active "mails"}} class="active"{{end}}><a href="/mails">Mails</a></li>
</ul>
</div>
</nav>
{{end}}
在main.go中:
var FuncMap = template.FuncMap{
"eq": func(a, b interface{}) bool {
return a == b
},
}
var templates = template.Must(template.ParseGlob("templates/*.html"))
和func main()
templates.Funcs(FuncMap)
该程序编译,但我发现添加{{if eq .Active "something"}} class="active"{{end}}
(我在这里包含的^^)导致程序不再显示任何文本。 任何想法为什么?
我试图将你的代码转换成一个最小的工作示例,我相信你的代码和模板按预期工作。 您可以在Go Playground上看到我的代码(并运行它)。
我对错误的猜测:您是否注意到{{define ...}}
仅为将来的使用定义了一个模板。 您仍然需要通过使用主模板中的{{ template "header" }}
或类似内容或使用templates.ExecuteTemplate
来告诉Go实际使用此templates.ExecuteTemplate
。