英文:
Access out of loop value inside golang template's loop
问题
我有这个结构体:
type Site struct {
Name string
Pages []int
}
我将Site
的一个实例传递给一个模板。
如果我想要写出所有页面的列表,我可以这样做:
{{range .Pages}}
<li><a href="{{.}}">{{.}}</a></li>
{{end}}
现在,如何在循环中使用Name
字段(例如将href
更改为Name/page
)的最简单方法是什么?
请注意,基于外部对象是传递给模板的全局对象的事实的解决方案是可以的。
英文:
I have this struct :
type Site struct {
Name string
Pages []int
}
I pass an instance of Site
to a template.
If I want to write a list of all pages, I do
{{range .Pages}}
<li><a href="{{.}}">{{.}}</a></li>
{{end}}
Now, what's the simplest way to use the Name
field inside the loop (for example to change the href
to Name/page
) ?
Note that a solution based on the fact that the external object is the global one that was passed to the template would be OK.
答案1
得分: 113
你应该知道传递给模板的变量可以作为$
来使用。
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
(请参阅text/template文档中的“Variables”部分。)
英文:
You should know that the variable passed in to the template is available as $
.
{{range .Pages}}
<li><a href="{{$.Name}}/{{.}}">{{.}}</a></li>
{{end}}
(See the text/template documentation under "Variables".)
答案2
得分: 17
{{$name := .Name}}
{{range $page := .Pages}}
{{end}}
Or simply make Pages
a map with Name as value?
type Site struct {
Pages map[string]string
}
{{range $page, $name := .Pages}}
{{end}}
英文:
What about:
{{$name := .Name}}
{{range $page := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
Or simply make Pages
a map with Name as value?
type Site struct {
Pages map[string]string
}
{{range $page, $name := .Pages}}
<li><a href="{{$name}}/{{$page}}">{{$page}}</a></li>
{{end}}
答案3
得分: 12
看起来没有比显式声明一个变量来引用外部对象(或其属性)更简单的解决方案:
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
**编辑:**这个答案不再正确,请看chowey的答案。
英文:
It looks like there's no simpler solution than to explicitly declare a variable for the outer object (or its properties) :
{{$out := .}}
{{range .Pages}}
<li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}
EDIT : this answer isn't the right one any more, look at chowey's one instead.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论