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

Divide template for several file doesn't provide data

我有 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 中?

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

{{template "name"  pipeline}}

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

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

dot 的值传递给 startend 模板。

因为dot的值可以这样设置,所以也可以用更复杂的方式将模板拆分成多个文件。例如,你可以有一个 HTML 模板来以卡片式的方式显示用户信息,无论你想在输出中的任何地方插入这张卡片,你都可以调用模板并将它传递给用户,甚至当周围的模板也需要其他信息或在循环中时。

有关详细信息,请查看 text/template 文档。这对 text/templatehtml/template 都有效,但仅针对 text/template 明确记录,而 html/template 的文档开头有一条注释告诉您,详细信息在哪里可以找到文档。