使用html / template包进行迭代时,打印切片的当前索引

时间:2013-12-18 01:41:44

标签: go revel

我尝试在使用Revel的html / template包进行迭代时打印切片的当前索引,但是我没有得到预期的结果。

我的行动:

func (c App) Index() revel.Result {
    test_slice := []string{"t", "e", "s", "t"}

    return c.Render(test_slice)
}

我的模板:

{{range $i, $test_slice := .}}
    {{$i}}
{{end}}

而不是0 1 2 3

我得到DevMode RunMode currentLocale errors flash test_slice session title

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我担心你没有迭代test_slice数组。如果你这样做,你的代码看起来像这样:

package main

import (
    "os"
    "html/template"
)

const templateString = `{{range $i, $test_slice := .}}
    {{$i}}
{{end}}`

func main() {
    t, err := template.New("foo").Parse(templateString)
    if err != nil {
        panic(err)
    }

    test_slice := []string{"t", "e", "s", "t"}

    err = t.Execute(os.Stdout, test_slice)
    if err != nil {
        panic(err)
    }
}

<强>输出:

    0

    1

    2

    3

您的代码正在迭代地图,其中test_slice只是其中一个值。您看到的是此地图的关键名称,其中test_slice就是其中之一。要使其正常工作,您应该将模板更改为:

{{range $i, $test_slice := .test_slice}}
    {{$i}}
{{end}}

考虑这个Playground示例:http://play.golang.org/p/are5JNPXt1