66

我有这个结构:

type Site struct {
    Name string
    Pages []int
}

我将一个实例传递Site给一个模板

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

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

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

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

4

3 回答 3

98

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

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

(请参阅“变量”下的文本/模板文档。)

于 2014-04-04T21:26:20.973 回答
15

关于什么:

{{$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}}
于 2013-05-26T05:01:19.227 回答
10

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

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

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

于 2013-05-24T12:41:36.443 回答