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

Den*_*ret 48 templates go

我有这个结构:

type Site struct {
    Name string
    Pages []int
}
Run Code Online (Sandbox Code Playgroud)

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

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

{{range .Pages}}
    <li><a href="{{.}}">{{.}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)

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

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

cho*_*wey 69

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

{{range .Pages}}
    <li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)

(参见"变量"下的文本/模板文档.)

  • "$",我怎么会错过巡演中的那个...... +1并谢谢! (2认同)

cre*_*ack 10

关于什么:

{{$name := .Name}}
{{range $page := .Pages}}
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)

或者只是Pages使用Name作为值制作地图?

type Site struct {
    Pages map[string]string
}


{{range $page, $name := .Pages}}
    <li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)


Den*_*ret 6

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

{{$out := .}}
{{range .Pages}}
    <li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)

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