在模板中迭代 map

我试图显示一个列表体育课(瑜伽,普拉提等)。对于每个类型有几个类,所以我想组所有的瑜伽类,和所有的普拉提类等。

我创建了这个函数来取一个切片并绘制它的地图

func groupClasses(classes []entities.Class) map[string][]entities.Class {
classMap := make(map[string][]entities.Class)
for _, class := range classes {
classMap[class.ClassType.Name] = append(classMap[class.ClassType.Name], class)
}
return classMap
}

现在的问题是如何迭代它,根据 http://golang.org/pkg/text/template/,您需要访问它的 .Key格式,我不知道的关键字(除非我也传递了一片关键字到模板)。如何在我的视图中解压这张地图。

All I have currently is

{{ . }}

它会显示类似这样的东西:

map[Pilates:[{102 PILATES ~/mobifit/video/ocen.mpg 169 40 2014-05-03 23:12:12 +0000 UTC 2014-05-03 23:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC {PILATES Pilates 1 2014-01-22 21:46:16 +0000 UTC} {1 leebrooks0@gmail.com password SUPERADMIN Lee Brooks {Male true} {1990-07-11 00:00:00 +0000 UTC true} {1.85 true} {88 true} 2014-01-22 21:46:16 +0000 UTC {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false} {0001-01-01 00:00:00 +0000 UTC false}} [{1 Mat 2014-01-22 21:46:16 +0000 UTC}]} {70 PILATES ~/mobifit/video/ocen.mpg 119 66 2014-03-31 15:12:12 +0000 UTC 2014-03-31 15:12:12 +0000 UTC 1899-12-30 00:00:00 +0000 UTC
132705 次浏览

检查 Go 模板文档中的 变量部分。一个范围可以声明两个变量,用逗号分隔。以下措施应该奏效:

\{\{ range $key, $value := . }}
<li><strong>\{\{ $key }}</strong>: \{\{ $value }}</li>
\{\{ end }}

正如 Herman 指出的,您可以从每次迭代中获得索引和元素。

\{\{range $index, $element := .}}\{\{$index}}
\{\{range $element}}\{\{.Value}}
\{\{end}}
\{\{end}}

实例:

package main


import (
"html/template"
"os"
)


type EntetiesClass struct {
Name string
Value int32
}


// In the template, we use rangeStruct to turn our struct values
// into a slice we can iterate over
var htmlTemplate = `\{\{range $index, $element := .}}\{\{$index}}
\{\{range $element}}\{\{.Value}}
\{\{end}}
\{\{end}}`


func main() {
data := map[string][]EntetiesClass{
"Yoga": \{\{"Yoga", 15}, {"Yoga", 51}},
"Pilates": \{\{"Pilates", 3}, {"Pilates", 6}, {"Pilates", 9}},
}


t := template.New("t")
t, err := t.Parse(htmlTemplate)
if err != nil {
panic(err)
}


err = t.Execute(os.Stdout, data)
if err != nil {
panic(err)
}


}

产出:

Pilates
3
6
9


Yoga
15
51

操场: http://play.golang.org/p/4ISxcFKG7v