首页 > 解决方案 > 将模板块与 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")
)

这似乎与我对模板继承的想法不相容。我必须以ExecTemplatemybase.html作为参数才能获得任何输出。但是,我想加载一个基本模板和许多内容模板。然后按名称调用内容模板。

我是否误解了 Golang 模板和/或块的使用方式?执行此类任务的优雅和惯用方式是什么?

标签: templatesgo

解决方案


使用以下内容将模板功能添加到您已经工作的内容中:

t, err := template.New("base.html").Funcs(sprig.FuncMap()).ParseFiles("./templates/base.html", "./templates/blogpost.html")

推荐阅读