多个文件的分割模板不提供数据

时间:2018-09-01 20:47:11

标签: templates go go-templates

我有1个文件(原始文件)的模板,它可以按预期工作,现在,当它变大时,我开始将其划分为3 files,然后复制并粘贴从原始文件到3个文件的数据,我能够看到模板已成功执行,但是startend模板中的数据丢失了,只是main模板收到了来自structData

的数据

例如

startTemple.txt

{{define "start"}}
...

{{end}}


main.txt (here i include both template)

{{template "start"}}
...

{{template "end"}}


endTemplate.txt


{{define "end"}}
...
{{end}}

我使用以下

t, err := template.New(mainTemplateName).Funcs(funcMap).ParseFiles(startPath, mainPath, endPath)

err = t.Execute(templFile, structData)
if err != nil {
    logs.Logger.Error(err)
}

我使用与以前相同的代码,问题是,structData中的数据生成后没有出现在startend模板中,仅出现在main中正确获取structData,我在这里会丢失什么?

模板(主开始)已使用硬编码数据成功生成,但应在structData期间添加的数据并未添加生成startend模板

是否应该以某种方式将structData添加到startend上?

1 个答案:

答案 0 :(得分:0)

使用template调用另一个模板时,默认情况下未设置dot,但是您可以像下面这样将值作为(可选)第二个参数传递给template:< / p>

{{template "name"  pipeline}}

在您的情况下,您的main.txt模板应为

{{template "start" .}}
...
{{template "end" .}}

dot的值向下传递到startend模板。

由于可以通过这种方式设置dot的值,因此还可以通过更复杂的方式将模板拆分为多个文件。例如,您可能有一个HTML模板以卡片样式显示用户信息,并且无论您想在输出中插入此卡片的位置,都可以调用该模板并将其传递给用户,即使周围的模板还需要其他信息或循环访问。

有关更多详细信息,请查看text/template文档。这对text/templatehtml/template均有效,但仅对text/template进行了明确记录,而文档开始处有一个注释,html/template告诉您详细的位置可以找到文档。