为了账号安全,请及时绑定邮箱和手机立即绑定

如何将多个对象传递给 Go html 模板

如何将多个对象传递给 Go html 模板

Go
繁华开满天机 2021-11-08 14:42:37
这是我的对象数组,type PeopleCount []struct{   Name  string   Count int}type Consultation []struct{   Name          string   Opd_count     int   Opinion_count int   Req_count     int}我应该如何将两个对象传递给 html 模板并将它们排列在表格中?
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

定义一个包含人数统计和咨询字段的匿名结构,并将该结构传递给模板 Execute 方法:


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

}

给元素一个命名类型通常比给切片一个命名类型更方便。


查看完整回答
反对 回复 2021-11-08
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

如果您愿意,可以定义一个未导出的结构体,其中包含人数统计和咨询字段,并将该结构体传递给模板 Execute 方法:


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 的回答大致相似。是否显式或匿名使用视图模型类型只是个人喜好的问题。


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信