テンプレート内で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"))
そしてfuncmain()で
templates.Funcs(FuncMap)
プログラムはコンパイルされますが、{{if eq .Active "something"}} class="active"{{end}}
(ここに含めた^^)を追加すると、プログラムにテキストが表示されなくなることがわかりました。理由は何ですか?
私はあなたのコードを最小限の実用的な例に変換しようとしました、そしてあなたのコードとテンプレートは期待通りに機能すると信じています。 Go Playground で私のコードを見る(そして実行する)ことができます。
何が悪かったのかについての私の推測:{{define ...}}
は将来の使用のためのテンプレートのみを定義していることに気づきましたか。メインテンプレートで{{ template "header" }}
などを使用するか、templates.ExecuteTemplate
を使用して、実際にこのテンプレートを使用するようにGoに指示する必要があります。