下一个代码非常适合在HomeTemplate中输出一个切片。
main.go
type Item struct {
Id int
Name string
Type string
}
var tmpl = template.Must(template.ParseGlob("tmpl/*"))
func Index(w http.ResponseWriter, r *http.Request) {
db := database.DbConn()
selDB, err := product.ByID()
if err != nil {
panic(err.Error())
}
i := Item{}
resItems := []Item{}
for selDB.Next() {
var id int
var product_name, product_type string
err = selDB.Scan(&id, &product_name, &product_type)
if err != nil {
panic(err.Error())
}
i.Id = id
i.Name = product_name
i.Type = product_type
resItems = append(resItems, i)
}
tmpl.ExecuteTemplate(w, "HomeTemplate", resItems)
// Close database connection
defer db.Close()
}
在模板中分叉下一个代码:
{{ range . }}
{{ .Name }}<br />
{{ end }}
为什么这样的东西不起作用?
{{ range .resItems }}
{{ .Name }}<br />
{{ end }}
如果我想要输出两个或更多个切片,我需要做什么或改变怎么办?
谢谢
答案 0 :(得分:0)
第一个问题,rang .resItems
为什么不起作用
在模板中,.
表示当前项目。比如java中的this
。
如果.
在某个方向range
,则表示来自range
操作的项目
如果不是,则表示您通过ExecuteTemplate()
方法传递的项目。与ExecuteTemplate(w, "HomeTemplate", resItems)
中一样,.
表示resItems
。因此,您无法使用.resItems
,因为这意味着resItems
的值为resItems
。
第二,如果您有更多切片要传递给模板,您可以将所有切片添加到地图中,如下所示:
t := template.New("test")
t, _ = t.Parse(`
test range
{{range .first}} {{.}} {{end}}
{{range .second}} {{.}} {{end}}
`)
var res = make(map[string]interface{})
aa := []string{"first", "second"}
bb := []string{"123", "456"}
res["first"] = aa
res["second"] = bb
t.Execute(os.Stdout, res)
// output
test range
first second
123 456
我有两个数组aa和bb,然后将它们添加到地图中,然后将其传递给模板。在模板中,.
表示地图,.first
表示数组aa。以及bb。
希望这可以帮助你...