如何将多个对象传递给 Go html 模板
How to pass multiple objects to Go html template
这是我的对象数组,
type PeopleCount []struct{
Name string
Count int
}
type Consultation []struct{
Name string
Opd_count int
Opinion_count int
Req_count int
}
我应该如何将这两个对象传递给 html 模板并将它们排列在 table 中?
定义一个匿名结构,其中包含用于人数统计和咨询的字段,并将该结构传递给模板执行方法:
var data = struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
在模板中使用这些字段:
{{range .PeopleCounts}}{{.Name}}
{{end}}
{{range .Consultations}}{{.Name}}
{{end}}
您可以为模板数据声明命名类型。匿名类型声明的优点是模板数据的知识局限于调用模板的函数。
您也可以使用地图代替类型:
err := t.Execute(w, map[string]interface{}{"PeopleCounts": p, "Consultations": c})
if err != nil {
// handle error
}
使用地图的缺点是模板中的拼写错误可能不会导致错误。例如,``{{range .PopleConts}}{{end}}` silent 什么都不做。
上面的代码假定 PeopleCount 和 Consultation 是结构类型而不是匿名结构类型的切片:
type PeopleCount struct {
Name string
Count int
}
type Consultation struct {
Name string
Opd_count int
Opinion_count int
Req_count int
}
给元素一个命名类型通常比给切片一个命名类型更方便。
如果您愿意,可以定义一个未导出的结构,其中包含用于人数统计和咨询的字段,并将该结构传递给模板执行方法:
type viewModel struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}
// ...
var data = viewModel{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
这种方法与@Bravada 的回答大体相似。显式或匿名使用视图模型类型只是个人喜好问题。
这是我的对象数组,
type PeopleCount []struct{
Name string
Count int
}
type Consultation []struct{
Name string
Opd_count int
Opinion_count int
Req_count int
}
我应该如何将这两个对象传递给 html 模板并将它们排列在 table 中?
定义一个匿名结构,其中包含用于人数统计和咨询的字段,并将该结构传递给模板执行方法:
var data = struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
在模板中使用这些字段:
{{range .PeopleCounts}}{{.Name}}
{{end}}
{{range .Consultations}}{{.Name}}
{{end}}
您可以为模板数据声明命名类型。匿名类型声明的优点是模板数据的知识局限于调用模板的函数。
您也可以使用地图代替类型:
err := t.Execute(w, map[string]interface{}{"PeopleCounts": p, "Consultations": c})
if err != nil {
// handle error
}
使用地图的缺点是模板中的拼写错误可能不会导致错误。例如,``{{range .PopleConts}}{{end}}` silent 什么都不做。
上面的代码假定 PeopleCount 和 Consultation 是结构类型而不是匿名结构类型的切片:
type PeopleCount struct {
Name string
Count int
}
type Consultation struct {
Name string
Opd_count int
Opinion_count int
Req_count int
}
给元素一个命名类型通常比给切片一个命名类型更方便。
如果您愿意,可以定义一个未导出的结构,其中包含用于人数统计和咨询的字段,并将该结构传递给模板执行方法:
type viewModel struct {
PeopleCounts []PeopleCount
Consultations []Consultation
}
// ...
var data = viewModel{
PeopleCounts: p,
Consultations: c,
}
err := t.Execute(w, &data)
if err != nil {
// handle error
}
这种方法与@Bravada 的回答大体相似。显式或匿名使用视图模型类型只是个人喜好问题。