插入模板名称为 class

Inserting template name as class

创建 Go 模板时,您可以为其命名,如本例所示,"my_home_template":

var tmplHome = template.Must(template.New("my_home_template").Funcs(funcMap).ParseFiles("templates/base.tmpl", "templates/content_home.tmpl"))

如何获取该模板名称并在实际模板文件中使用它?

最终我只想定义一个方便的cssclass,像这样:

<body class="my_home_template">

这是一个可行的解决方案,采纳了 mkopriva 的建议:

执行模板时,传递一些带有虚拟数据的自定义参数。在这里,我只是创建一个 "PageHome" 参数传递给模板,值是一个简单的“1”,但它可以是任何值:

tmplHome.ExecuteTemplate(w, "base", map[string]interface{}{"PageHome": "1", "Data": events, "UserFirstName": &u.FirstName, "UserProfilePic": &u.ProfilePic})

然后,在模板内部,一个简单的 if 语句来检查参数是否存在,并相应地做一些事情:

{{ if .PageHome }}
    <body class="PageHome">
{{ else }}
    <body>
{{ end }}

我的所有其他模板执行根本不传递 "PageHome" 参数,因此 if 语句永远不会传递给它们。

可能有更高级的解决方案,通过模板函数映射使用函数,并在所有模板执行中具有一致的 "PageType":"something" 参数,但最后您仍然必须定义每个模板执行一个参数,仍然必须在模板中建立 if 语句。