templates - 为多个文件划分模板不提供数据
问题描述
我有一个带有 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
正确获取 structData 时,我可能会在这里遗漏什么?end
main
使用硬编码的数据成功生成了模板(开始主端) ,但是应该来自的数据在生成过程中没有添加到和模板中structData
start
end
我应该以某种方式将 thestructData
也添加到start
and吗?end
解决方案
当您使用template
调用另一个模板时,dot
默认情况下未设置,但您可以将该值作为(可选)第二个参数传递,template
如下所示:
{{template "name" pipeline}}
在您的情况下,您的main.txt
模板应该是
{{template "start" .}}
...
{{template "end" .}}
dot
将down的值传递给start
andend
模板。
因为dot
可以通过这种方式设置 的值,所以也可以以更复杂的方式将模板拆分为多个文件。例如,您可以有一个 HTML 模板以卡片样式的方式显示用户信息,并且无论您想在输出中插入此卡片的任何位置,您都可以调用该模板并将其传递给用户,即使周围的模板还需要其他信息或循环使用。
有关更多详细信息,请查看text/template
文档。这适用于text/template
和html/template
,但仅针对 明确记录text/template
,而在文档开头有一个注释html/template
告诉您,可以在哪里找到详细文档。
推荐阅读
- javascript - nodejs 承诺更好的方法来处理承诺实现中发生的错误?
- javascript - 使用 AngularJS 中的复选框按多个条件过滤数据
- jupyter-notebook - 信任 Jupyter 不受信任的笔记本
- swift - 检测命令行工具何时退出
- php - 如何检查 $_POST 是否只是空格?
- javascript - 如何将变量传递给ngif
- linux - 未检测到 systemd 和 sway 套接字
- javascript - Chrome 扩展:使用参数启动选项页面
- c# - 属性更改时页面不更新
- java - Tomcat 在本地主机上工作正常,但在部署时出现内部服务器错误