英文:
Defining a top level go template
问题
假设我有两个文本文件(go模板):
child.tmpl
TEXT1
Hello {{ . }}
top.tmpl
TEXT2
{{ template "child.tmpl" "argument" }}
child.tmpl
模板嵌套在top.tmpl
中。
一个典型的解析它们的程序将是:
package main
import (
"os"
"text/template"
)
func main() {
t := template.Must(template.ParseFiles("child.tmpl", "top.tmpl"))
t.ExecuteTemplate(os.Stdout, "top.tmpl", nil)
}
有没有一种方法可以使用{{ . }}
符号将模板作为参数嵌入到顶级模板中?类似于{{ template {{.}} "argument" }}
这样的写法?
- 更一般地说,有什么最佳方法来定义一个布局模板,以便我可以将其用作顶级模板来供多个子模板使用?
英文:
Suppose that I have tow text files (go templates):
child.tmpl
TEXT1
Hello {{ . }}
top.tmpl
TEXT2
{{ template "child.tmpl" "argument"}}
the child.tmpl
template is nested in top.tmpl
A typical program to parse them will be :
package main
import (
"os"
"text/template"
)
func main() {
t := template.Must(template.ParseFiles("child.tmpl", "top.tmpl")
t.ExecuteTemplate(os.Stdout, "top.tmpl", nil)
}
Is there any method the pass the template to be embedded in the top-level template as an argument using the {{ . }}
notation ?
something like {{ template {{.}} "argument" }}
- More generally, what is the best way to define a layout template so I can use it like a top-level template to multiple child templates ?
答案1
得分: 2
有两种被接受的方法来解决你的问题:
第一种方法是编写自己的模板包含函数,并将其注册为 template.FuncMap
,通过 template.Funcs
将其与你的模板关联起来。
另一种方法是在你的子模板中使用 {{define xxx}}
块。然后你可以有两个不同的文件来定义相同的模板:
- file1.html:
{{define body}}...{{end}}
- file2.html:
{{define body}}...{{end}}
根据你的需求解析正确的文件,在你的父模板中使用 {{template body "argument"}}
。
在我看来,第一种选项更加灵活。
英文:
There are two accepted ways to solve your problem:
The first involves writing your own template-inclusion function and registering it as an template.FuncMap
with your template through template.Funcs
.
The other way is to use {{define xxx}}
blocks in your child templates. Then you could have two different files that define the same template:
- file1.html:
{{define body}}...{{end}}
- file2.html:
{{define body}}...{{end}}
Parse the correct file depending on your needs and in your parent template just do {{template body "argument"}}
.
In my opinion, the first option is more flexible.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论