我有这个结构:
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
在循环中使用该字段的最简单方法是什么(例如更改href
为Name/page
)?
请注意,基于外部对象是传递给模板的全局对象这一事实的解决方案是可以的.
cho*_*wey 69
您应该知道传入模板的变量可用$
.
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)
(参见"变量"下的文本/模板文档.)
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)
看起来没有比为外部对象(或其属性)显式声明变量更简单的解决方案:
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
Run Code Online (Sandbox Code Playgroud)
编辑:这个答案不再是正确的,请看看chowey的答案.