我稍微尝试了一下Go语言的HTML模板,在模板中循环对象的所有示例似乎都是将切片的结构体传递到模板中,就像这个例子中一样:
type UserList struct {
Id []int
Name []string
}
var templates = template.Must(template.ParseFiles("main.html"))
func rootHandler(w http.ResponseWriter, r *http.Request) {
users := UserList{
Id: []int{0, 1, 2, 3, 4, 5, 6, 7},
Name: []string{"user0", "user1", "user2", "user3", "user4"},
}
templates.ExecuteTemplate(w, "main", &users)
}
使用“main”模板:
{{define "main"}}
{{range .Name}}
{{.}}
{{end}}
{{end}}
这种做法可行,但是如果我只使用.Name属性来迭代的话,我不理解该如何将每个ID显示在其对应的名称旁边。我认为更合理的做法是将每个用户作为一个对象处理以便在显示时分组其属性。
因此我的问题是:
如果我想要将一组结构体传递到模板中,应该怎么办?这样做的语法是什么样的?我在官方的html/template文档中没有找到或理解如何实现这一点。 我想象中的语法大致类似于这样:
type User struct {
Id int
Name string
}
type UserList []User
var myuserlist UserList = ...
并且一个模板看起来有点像这样:(这里的语法是故意错误的,只是为了让人理解)
{{define "main"}}
{{for each User from myuserlist as myuser}}
{{myuser.Id}}
{{myuser.Name}}
{{end}}
{{end}}