templates - 将模板块与 Golang 中的模板函数结合使用
问题描述
我希望在 Golang 中使用模板块来获得“模板继承”样式的覆盖逻辑。
我有一个base.html
类似这样的模板:
<title>{{block "title" .}}Default Title{{end}}</title>
<body>{{block "content" .}}This is the default body.{{end}}</body>
然后我有一个blogpost.html
这样的模板:
{{define "title"}}Blog Post Title{{end}}
{{define "content"}}Lorem Ipsum...{{end}}
只要我使用ParseFiles
然后执行模板,所有这些都可以完美运行
t, err := template.ParseFiles("./templates/base.html", "./templates/blogpost.html")
t.Execute(t, viewModel)
ParseFiles
我这样做的方式是为我需要渲染的每个模板调用一次。例如。我没有按名称调用模板。
但是,我现在也想使用模板函数。现在我需要调用template.New
来获取一个空模板,分配一个名称,添加模板函数并解析文件(Funcs
“必须在解析模板之前调用”):
tpl := template.Must(
template.New("somename").Funcs(sprig.FuncMap()).ParseGlob("*.html")
)
这似乎与我对模板继承的想法不相容。我必须以ExecTemplate
mybase.html
作为参数才能获得任何输出。但是,我想加载一个基本模板和许多内容模板。然后按名称调用内容模板。
我是否误解了 Golang 模板和/或块的使用方式?执行此类任务的优雅和惯用方式是什么?
解决方案
使用以下内容将模板功能添加到您已经工作的内容中:
t, err := template.New("base.html").Funcs(sprig.FuncMap()).ParseFiles("./templates/base.html", "./templates/blogpost.html")
推荐阅读
- javascript - 如何在 js 浏览器模块中动态获取导入的对象
- android - PopupWindow Y 位置错误
- django - 没有这样的表:django_session 在 azure web 应用程序上
- c++ - C++:检查存储在 std::any 中的值是否是整数
- c++ - 在简单代码演示中使用 std::thread 时有关重载函数的 C++ 编译错误
- c# - 等待不同线程上的调用时会发生什么
- excel - 在 VBA 中使用 SUMPRODUCT 公式的变体
- html - 修复/改进响应式 CSS 网格
- npm - 纱线:当文件在那里时 MODULE_NOT_FOUND
- css - 如何将css悬停样式应用于已赋予其自己样式的子元素