If statement 在模板中使用条件

If statement 在模板中使用条件,if-statement,go,go-templates,If Statement,Go,Go Templates,在模板中使用if语句确实让我感到困惑 我试图将一个class=“active”放在一个由golang模板制作的导航列表中,以执行一个基本的选项卡菜单来检测活动选项卡。 以下是我的尝试: {{define "header"}} <!DOCTYPE html> <html> <head> <title>Geoprod</title> {{template "stylesheet" .}} &l

在模板中使用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}}
和在func main()中


程序可以编译,但我发现添加
{{if eq.Active“something”}}class=“Active”{{end}}}
(^^^^^我在这里包含)会导致程序不再显示任何文本。知道为什么吗?

我试着将您的代码转换成一个最小的工作示例,我相信您的代码和模板工作正常。您可以在上查看我的代码(并运行它)


我对错误的猜测是:您是否注意到
{{{define…}}
只定义了一个模板供将来使用。您仍然需要通过在主模板中使用
{{template“header”}
或类似方法,或者通过使用
templates.ExecuteTemplate

2件事,告诉Go实际使用此模板。您是否检查了执行时的错误?另外:在解析模板之前,必须调用Funcs()。否则,函数将不为人所知。另一方面:eq func已经定义好了。如果根本没有输出,就一定有错误。此外,还缺少
eq
的实现。请看这里:特别是比较接口值的部分。点
是您的管道(在顶层,无论您将什么作为数据传递给
Execute*()
方法)。如果未设置
.Active
,这可能已经是您的问题。但这表示您没有检查
Execute
错误。请在
Execute()
处显示代码。请检查:@NicolasM请执行。否则很难做到这一点。
var FuncMap = template.FuncMap{
    "eq": func(a, b interface{}) bool {
        return a == b
    },
}
var templates = template.Must(template.ParseGlob("templates/*.html"))
templates.Funcs(FuncMap)