Ответ 1
Вы должны знать, что переменная, переданная в шаблон, доступна как $
.
{{range .Pages}}
<li><a href="{{.}}">{{$.Name}}</a></li>
{{end}}
(См. документацию text/template в разделе "Переменные".)
У меня есть эта структура:
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
карту с именем в качестве значения?
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 вместо этого.