作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
问题是:每个页面的 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/
我是一名优秀的程序员,十分优秀!