templates - 转到模板 : two or more slices ranges

标签 templates go range slice

下一个代码非常适合在 HomeTemplate 中输出一个 slice 。

主.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()
}

在模板中 forks 下一段代码:

{{ range . }}
    {{ .Name }}<br />
{{ end }}

为什么这样的东西不起作用?

{{ range .resItems }}
    {{ .Name }}<br />
{{ end }}

如果我想输出两个或更多 slice ,我需要做什么或改变什么?

谢谢

最佳答案

第一个问题,为什么rang .resItems 不起作用。
在模板中,. 表示当前项。就像java中的this。 如果.在某个方向如range,则表示来自range操作的项目。
如果不是,则表示您从 ExecuteTemplate() 方法传递的项目。就像在 ExecuteTemplate(w, "HomeTemplate", resItems) 中一样,. 表示 resItems。所以你不能使用 .resItems 因为这意味着 resItems 有一个名为 resItems 的值。

其次,如果您有更多 slice 要传递给模板,您可以将它们全部添加到 map 中,如下所示:

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,将它们添加到映射中,然后将其传递给模板。在template中,.表示 map ,.first得到的是数组aa。 bb 也是如此。

希望对你有帮助...

关于templates - 转到模板 : two or more slices ranges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40324594/

相关文章:

c++ - 将类型转换为唯一编号的模板元程序

function - Google 的 'go' 和范围/功能

go - 如何在 Go 中自动生成 Avro 模式?

c# - 如果 IP 在 IP 范围之间,则限制 IP

python - 在多个过滤条件中插入一个范围

list - Haskell 中列表生成的奇怪结果

c++ - 初始化作为模板实例的基类不需要模板参数吗?

c++ - 无法将模板化函数显式实例化为模板化类

c++ - 检查类是否等于模板实例或普通类

go - 如何使用 reflect 包访问函数的返回数据?