你如何将结构传递给 go 中的子模板?
How do you pass structs to subtemplates in go?
我试图了解如何在 Go 中多次使用相同的模板传递不同的结构。
这是我试过的:
import (
"fmt"
"html/template"
"os"
)
type person struct {
id int
name string
phone string
}
type page struct {
p1 person
p2 person
}
func main() {
p1 := person{1, "Peter", "1001"}
p2 := person{2, "Mary", "1002"}
p := page{p1, p2}
fmt.Println(p)
t := template.Must(template.New("foo").Parse(`
{{define "s1"}}
<span id="{{.id}}">{{.name}} {{.phone}}</span>
{{end}}
{{template "s1" {{.p1}}}}{{template "s1" {{.p2}}}}
`))
t.Execute(os.Stdout, p)
}
但它没有按预期工作:
panic: template: foo:5: unexpected "{" in template clause
预期输出为:
<span id="1">Peter 1001</span><span id="2">Mary 1002</span>
当你调用模板函数时,你给了 2 个参数(由 space 分隔):
- 定义的模板名称(“s1”)
- 您反对:.p1 在您的案例中
所以这里有一个适用于您的情况的模板:
t := template.Must(template.New("foo").Parse(`
{{ define "s1" }}
<span id="{{ .id }}">{{.name}} {{ .phone }}</span>
{{ end }}
{{ template "s1" .p1 }}
{{ template "s1" .p2 }}
`))
}
我试图了解如何在 Go 中多次使用相同的模板传递不同的结构。
这是我试过的:
import (
"fmt"
"html/template"
"os"
)
type person struct {
id int
name string
phone string
}
type page struct {
p1 person
p2 person
}
func main() {
p1 := person{1, "Peter", "1001"}
p2 := person{2, "Mary", "1002"}
p := page{p1, p2}
fmt.Println(p)
t := template.Must(template.New("foo").Parse(`
{{define "s1"}}
<span id="{{.id}}">{{.name}} {{.phone}}</span>
{{end}}
{{template "s1" {{.p1}}}}{{template "s1" {{.p2}}}}
`))
t.Execute(os.Stdout, p)
}
但它没有按预期工作:
panic: template: foo:5: unexpected "{" in template clause
预期输出为:
<span id="1">Peter 1001</span><span id="2">Mary 1002</span>
当你调用模板函数时,你给了 2 个参数(由 space 分隔):
- 定义的模板名称(“s1”)
- 您反对:.p1 在您的案例中
所以这里有一个适用于您的情况的模板:
t := template.Must(template.New("foo").Parse(`
{{ define "s1" }}
<span id="{{ .id }}">{{.name}} {{ .phone }}</span>
{{ end }}
{{ template "s1" .p1 }}
{{ template "s1" .p2 }}
`))
}