gpt4 book ai didi

templates - 如何使用 Go 将多个字符串解析为一个模板?

转载 作者:IT王子 更新时间:2023-10-29 00:58:33 24 4
gpt4 key购买 nike

是否有类似 template.ParseFiles("base.html", "home.html") 的简单方法,但对于字符串从一组字符串构建模板?

我有一个基本模板和一个页面模板列表(全部为字符串),我想在基本模板之上构建它们。

我想出了如何合并它们,但我的解决方案非常冗长而且看起来不够优雅,即使有效。

最佳答案

您可以使用 template.New() 创建一个新的空模板函数。然后你可以使用 Template.New() 方法 创建一个新的、空的、关联 模板。您可以使用 Template.Parse() 将其“解析为”方法。

它可能是这样的:

func parseTemplates(templs ...string) (t *template.Template, err error) {
t = template.New("_all")

for i, templ := range templs {
if _, err = t.New(fmt.Sprint("_", i)).Parse(templ); err != nil {
return
}
}

return
}

测试它:

t, err := parseTemplates(
`{{define "one"}}I'm #1.{{end}}`,
`{{define "two"}}I'm #2, including #1: {{template "one" .}}{{end}}`,
)
if err != nil {
panic(err)
}

if err = t.ExecuteTemplate(os.Stdout, "two", nil); err != nil {
panic(err)
}

输出(在 Go Playground 上尝试):

I'm #2, including #1: I'm #1.

另见相关问题:Go template name

注意事项

虽然我们可以调用 Template.Parse()多次在单个模板上执行方法,并且它会正确解析多个 named 模板,仍然建议获取一个新的 template.Template通过调用 Template.New() 为每个。因为如果模板文本的内容 命名模板之外,它们将被覆盖并且只保留最后一个。例如:abc {{define "one"}}no 1{{end}}。静态文本 “abc” 将在随后的 Template.Parse() 调用中丢失。

Template.Parse() 的文档中也提到了这一点:

(In multiple calls to Parse with the same receiver template, only one call can contain text other than space, comments, and template definitions.)

关于templates - 如何使用 Go 将多个字符串解析为一个模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41856021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com