访问golang模板循环中的循环值

时间:2013-05-24 12:03:08

标签: templates go

我有这个结构:

type Site struct {
    Name string
    Pages []int
}

我将Site的实例传递给template

如果我想写所有页面的列表,我会

{{range .Pages}}
    <li><a href="{{.}}">{{.}}</a></li>
{{end}}

现在,在循环中使用Name字段的最简单方法是什么(例如将href更改为Name/page)?

请注意,基于外部对象是传递给模板的全局对象这一事实的解决方案是可以的。

3 个答案:

答案 0 :(得分:67)

您应该知道传入模板的变量可以$

{{range .Pages}}
    <li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}

(参见&#34;变量&#34;下的text/template文档。)

答案 1 :(得分:9)

怎么样:

{{$name := .Name}}
{{range $page := .Pages}}
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}

或者只是将Pages设为名称为值的地图?

type Site struct {
    Pages map[string]string
}


{{range $page, $name := .Pages}}
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}

答案 2 :(得分:6)

看起来没有比为外部对象(或其属性)显式声明变量更简单的解决方案:

{{$out := .}}
{{range .Pages}}
    <li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}

编辑:这个答案不再是正确的,请看看chowey的答案。