稍微玩了一下 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)
}
“主”模板是:
{{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}}