在玩过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旁边显示每个ID。我会发现在显示时将每个用户视为一个对象来对其属性进行分组会更合乎逻辑。
因此,我的问题是:
如果我想将结构片段传递给模板怎么办? 使它起作用的语法是什么?我尚未在官方html / template doc中找到或了解如何进行操作。我想像的东西看起来像这样:
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}}
用:
{{range .}} {{.Id}} {{.Name}} {{end}}
为模板。 这是一个示例:http : //play.golang.org/p/A4BPJOcfpB 您需要在包装概述中阅读有关“点”的更多信息,以了解如何正确使用它。http://golang.org/pkg/text/template/#pkg- overview(检出“管道”部分)