我有这个结构:
type Site struct {
Name string
Pages []int
}
我将Site
的一个实例传递给了template。
如果我想写一个所有页面的列表,我会这样做
{{range .Pages}}
<li><a href="{{.}}">{{.}}</a></li>
{{end}}
现在,在循环中使用Name
字段的最简单方法是什么(例如将href
更改为Name/page
)?
请注意,基于外部对象是传递给模板的全局对象这一事实的解决方案是可以的。
您应该知道传入模板的变量可用作$
。
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
(参见“变量”下的text/template文档。)
关于什么:
{{$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}}
看起来没有比为外部对象(或其属性)显式声明变量更简单的解决方案:
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
编辑:这个答案不再是正确的,请看看chowey的答案。