一尘不染

如何在结构片的范围内而不是在切片的结构上范围

go

在玩过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}}

阅读 206

收藏
2020-07-02

共1个答案

一尘不染

用:

{{range .}}
    {{.Id}}
    {{.Name}}
{{end}}

为模板。
这是一个示例:http :
//play.golang.org/p/A4BPJOcfpB
您需要在包装概述中阅读有关“点”的更多信息,以了解如何正确使用它。http://golang.org/pkg/text/template/#pkg-
overview(检出“管道”部分)

2020-07-02