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

问题描述 投票:46回答:3

我有这个结构:

type Site struct {
    Name string
    Pages []int
}

我将Site的一个实例传递给了template

如果我想写一个所有页面的列表,我会这样做

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

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

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

templates go
3个回答
67
投票

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

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

(参见“变量”下的text/template文档。)


9
投票

关于什么:

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

或者只是让Pages成为一个名为value的地图?

type Site struct {
    Pages map[string]string
}


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

6
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.