插入模板名称为 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 语句。
创建 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 语句。