多个文件的划分模板不提供数据
Divide template for several file doesn't provide data
我有 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
中?
当您使用 template
调用另一个模板时,默认情况下不会设置 dot
,但您可以像这样将值作为(可选)第二个参数传递给 template
:
{{template "name" pipeline}}
在您的情况下,您的 main.txt
模板应该是
{{template "start" .}}
...
{{template "end" .}}
将 dot
的值传递给 start
和 end
模板。
因为dot
的值可以这样设置,所以也可以用更复杂的方式将模板拆分成多个文件。例如,你可以有一个 HTML 模板来以卡片式的方式显示用户信息,无论你想在输出中的任何地方插入这张卡片,你都可以调用模板并将它传递给用户,甚至当周围的模板也需要其他信息或在循环中时。
有关详细信息,请查看 text/template
文档。这对 text/template
和 html/template
都有效,但仅针对 text/template
明确记录,而 html/template
的文档开头有一条注释告诉您,详细信息在哪里可以找到文档。
我有 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
中?
当您使用 template
调用另一个模板时,默认情况下不会设置 dot
,但您可以像这样将值作为(可选)第二个参数传递给 template
:
{{template "name" pipeline}}
在您的情况下,您的 main.txt
模板应该是
{{template "start" .}}
...
{{template "end" .}}
将 dot
的值传递给 start
和 end
模板。
因为dot
的值可以这样设置,所以也可以用更复杂的方式将模板拆分成多个文件。例如,你可以有一个 HTML 模板来以卡片式的方式显示用户信息,无论你想在输出中的任何地方插入这张卡片,你都可以调用模板并将它传递给用户,甚至当周围的模板也需要其他信息或在循环中时。
有关详细信息,请查看 text/template
文档。这对 text/template
和 html/template
都有效,但仅针对 text/template
明确记录,而 html/template
的文档开头有一条注释告诉您,详细信息在哪里可以找到文档。