gpt4 book ai didi

go - 如何在go中扩展模板?

转载 作者:IT王子 更新时间:2023-10-29 02:12:48 26 4
gpt4 key购买 nike

问题是:每个页面的 content 部分都有几篇 article,我想在下面插入一个 likebar 模板每篇文章。

所以 base.tmpl 就像:

<html>
<head>
{{template "head.tmpl" .}}
</head>
<body>
{{template "content.tmpl" .}}
</body>
</html>

article.tmpl 中我想要:

    {{define "content"}}    
<div>article 1
{{template "likebar.tmpl" .}}
</div>
<div>article 2
{{template "likebar.tmpl" .}}
</div>
... //these divs are generated dynamically
{{end}}

如何使用 html/template 实现此目的?我试图在 base.tmpl 中插入一个 {{template "iconbar".}} 然后嵌套 {{template "likebar.tmpl".}} {{define "content" 里面但是失败了:

Template File Error: html/template:base.tmpl:122:12: no such template "likebar.tmpl"

最佳答案

您只能包含/插入associated templates .

如果您有多个模板文件,请使用 template.ParseFiles()template.ParseGlob()解析它们所有,结果模板将包含所有已经关联的模板,因此它们可以相互引用。

如果您确实使用上述函数来解析您的模板,那么它找不到 likebar.tmpl 的原因是因为您使用了无效的名称(例如缺少文件夹名称) ).

当从 string 源解析时,您可以使用 Template.Parse()方法,它还将嵌套模板关联到顶级模板。

查看这两个工作示例:

func main() {
t := template.Must(template.New("").Parse(templ1))
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}

t2 := template.Must(template.New("").Parse(templ2))
template.Must(t2.Parse(templ2Like))
if err := t2.Execute(os.Stdout, nil); err != nil {
panic(err)
}
}

const templ1 = `Base template #1
And included one: {{template "likebar"}}
{{define "likebar"}}I'm likebar #1.{{end}}
`

const templ2 = `Base template #2
And included one: {{template "likebar"}}
`

const templ2Like = `{{define "likebar"}}I'm likebar #2.{{end}}`

输出(在 Go Playground 上尝试):

Base template #1
And included one: I'm likebar #1.

Base template #2
And included one: I'm likebar #2.

关于go - 如何在go中扩展模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40714378/

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