gpt4 book ai didi

go - 在 Go 中解析多个模板

转载 作者:IT王子 更新时间:2023-10-29 01:40:58 27 4
gpt4 key购买 nike

我正在尝试弄清楚如何在 Go 中加载多个模板,当许多模板具有相似的....base 时,您可以说吗?

目前,我在正在处理的示例应用程序中加载了以下两个模板:

homeTemplate, err = template.ParseFiles(
"views/layout/base.gohtml",
"views/layout/menu.html",
"views/layout/footer.gohtml",
"views/home.gohtml")
if err != nil {
panic(err)
}

contactTemplate, err = template.ParseFiles(
"views/layout/base.gohtml",
"views/layout/menu.html",
"views/layout/footer.gohtml",
"views/contact.gohtml")
if err != nil {
panic(err)
}

我的问题如下:

有没有一种方法可以将每个模板列表中的前三个条目存储在一个变量中,然后在末尾附加最后一个包含项,这样我就可以缩短代码量和简化事情?

我处理这整件事是不是错了?我在某处读到有关使用包含 template["name"] 语法的设置然后从中进行渲染的信息,也许我只需要在其余部分之前加载基本模板,因为它们是更多或更少的布局内容,它们可能不需要成为上述变量的一部分?

最佳答案

一种选择是使用 Template.Clone()正如您在 mkopriva 的回答中看到的那样。请注意,Template.Clone() 不会复制模板的实际表示,克隆将与原始模板共享表示。

另一种选择是一步解析所有模板文件,因此“基本”模板显然只会被解析一次:

all := template.Must(template.ParseFiles(
"views/layout/base.gohtml",
"views/layout/menu.html",
"views/layout/footer.gohtml",
"views/home.gohtml",
"views/contact.gohtml",
))

你可以使用 Template.ExecuteTemplate()执行指定的命名模板,例如:

// To execute the home template:
err := all.ExecuteTemplate(w, "home.gohtml", params)

// To execute the contact template:
err := all.ExecuteTemplate(w, "contact.gohtml", params)

使用 Template.Clone() 的优点是您可以拥有多个具有相同名称的模板,这在一次加载所有模板时不起作用。

一次加载所有的优点是它更简单。

关于go - 在 Go 中解析多个模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842389/

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