我有1个文件(原始文件)的模板,它可以按预期工作,现在,当它变大时,我开始将其划分为3 files
,然后复制并粘贴从原始文件到3个文件的数据,我能够看到模板已成功执行,但是start
和end
模板中的数据丢失了,只是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
中的数据生成后没有出现在start
和end
模板中,仅出现在main
中正确获取structData,我在这里会丢失什么?
模板(主开始)已使用硬编码数据成功生成,但应在structData
期间添加的数据并未添加生成start
和end
模板
是否应该以某种方式将structData
添加到start
和end
上?
答案 0 :(得分:0)
使用template
调用另一个模板时,默认情况下未设置dot
,但是您可以像下面这样将值作为(可选)第二个参数传递给template
:< / p>
{{template "name" pipeline}}
在您的情况下,您的main.txt
模板应为
{{template "start" .}}
...
{{template "end" .}}
将dot
的值向下传递到start
和end
模板。
由于可以通过这种方式设置dot
的值,因此还可以通过更复杂的方式将模板拆分为多个文件。例如,您可能有一个HTML模板以卡片样式显示用户信息,并且无论您想在输出中插入此卡片的位置,都可以调用该模板并将其传递给用户,即使周围的模板还需要其他信息或循环访问。
有关更多详细信息,请查看text/template
文档。这对text/template
和html/template
均有效,但仅对text/template
进行了明确记录,而文档开始处有一个注释,html/template
告诉您详细的位置可以找到文档。