Подтвердить что ты не робот

Доступ из значения цикла внутри цикла шаблона golang

У меня есть эта структура:

type Site struct {
    Name string
    Pages []int
}

Я передаю экземпляр Site в template.

Если я хочу написать список всех страниц, я делаю

{{range .Pages}}
    <li><a href="{{.}}">{{.}}</a></li>
{{end}}

Теперь, какой самый простой способ использовать поле Name внутри цикла (например, чтобы изменить href на Name/page)?

Обратите внимание, что решение, основанное на том, что внешний объект является глобальным, переданному шаблону, будет в порядке.

4b9b3361

Ответ 1

Вы должны знать, что переменная, переданная в шаблон, доступна как $.

{{range .Pages}}
    <li><a href="{{.}}">{{$.Name}}</a></li>
{{end}}

(См. документацию text/template в разделе "Переменные".)

Ответ 2

Как насчет:

{{$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}}

Ответ 3

Похоже, нет более простого решения, чем явно объявлять переменную для внешнего объекта (или его свойств):

{{$out := .}}
{{range .Pages}}
    <li><a href="{{$out.Name}}/{{.}}">{{.}}</a></li>
{{end}}

РЕДАКТИРОВАТЬ: этот ответ не является правильным, посмотрите на chowey вместо этого.