将模板名称作为类插入

时间:2018-02-13 19:06:59

标签: go go-templates

创建Go模板时,您可以为其命名,例如“my_home_template”:

  this.props.resetTaskBatch({
        tasks: threeSampleTasks,
        busy: true
    }).then(() => {
          this.performTasks(); 
   });

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

最终我只想定义一个方便的css类,如下所示:

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

1 个答案:

答案 0 :(得分:0)

这是一个有效的解决方案,采取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 }}

我所有其他模板执行都没有通过&#34; PageHome&#34;参数,所以if语句永远不会为它们传递真实。

这可能是一个更先进的解决方案,它通过模板功能图使用功能,并且具有一致的&#34; PageType&#34;:&#34;&#34;&#34;&#34;所有模板执行中的参数,但最终你仍然需要为每个模板执行定义一个参数,并且仍然必须在模板中构建if语句。