Как получить поле по индексу в шаблоне?

Я отправляю кусок articles в шаблон. Каждая articlestruct похожа на:

type Article struct {
    ID        uint32        `db:"id" bson:"id,omitempty"` 
    Content   string        `db:"content" bson:"content"`
    Author    string        `db:"author" bson:"author"`
    ... 
}

Я могу перебирать articles срез в {{range $n := articles}} и получать каждый {{$n.Content}}, но я хочу, чтобы в заголовке был только первый (вне цикла диапазона). Я пробовал:

{{index .articles.Content 0}}

Но я получаю:

Ошибка файла шаблона: шаблон: article_list.tmpl: 14: 33: выполнение «содержимого» в ‹.articles.Content>: невозможно оценить поле Content в интерфейсе типа {}

Если я просто вызову

{{index .articles 0}}

Показывает весь объект article [0].

Как я могу это исправить?


person Karlom    schedule 25.11.2016    source источник
comment
Почему этот вопрос не получил голосов?   -  person John Balvin Arias    schedule 03.09.2018


Ответы (2)


Индексная функция обращается к n-му элементу указанного массива, поэтому запись

{{ index .articles.Content 0 }}

по сути пытается написать articles.Content[0]

Вы бы хотели что-то вроде

{{ with $n := index .articles 0 }}{{ $n.Content }}{{ end }}

person Alex P    schedule 25.11.2016
comment
Ага, это решило проблему. Хотя мне хотелось, чтобы это было менее многословно ... - person Karlom; 25.11.2016

Более краткий способ:

{{(index .articles.Content 0).Content }}

Что было бы эквивалентом articles[0].Content.

person BryanWheelock    schedule 31.01.2019
comment
Я считаю, что это можно сократить до {{(index .articles 0) .Content}}! - person pdbrito; 06.06.2020