10

在模板中使用 if 语句真的让我很困惑。

我正在尝试class = "active"在使用 golang 模板制作的导航列表中放入一个用于检测活动选项卡的基本选项卡菜单。这是我的尝试:

{{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&eacutet&eacute</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}}(^^,我在这里包含)会导致程序不再显示任何文本。知道为什么吗?

4

1 回答 1

5

我试图将您的代码转换为一个最小的工作示例,并且我相信您的代码和模板可以按预期工作。您可以在Go Playground上看到我的代码(并运行它)。

我对出了什么问题的猜测:您是否注意到{{define ...}}仅定义了一个模板以供将来使用。您仍然需要告诉 Go 实际使用此模板,方法是{{ template "header" }}在主模板中使用或类似,或者使用templates.ExecuteTemplate.

于 2015-05-11T16:57:13.753 回答