#templates #go
#шаблоны #Вперед
Вопрос:
Я передаю структуру (один элемент представляет собой массив объектов категории) в шаблон для рендеринга. В шаблоне у меня есть код, который выглядит примерно так:
{.repeated section Categories}
<p>{@}</p>
{.end}
Однако у каждой категории есть несколько собственных элементов, к которым мне нужно иметь доступ (например, Title). Я пробовал такие вещи, как {@ .Title} но, похоже, я не могу найти правильный синтаксис для выполнения этого. Как мне получить доступ к элементам данных в массиве во время цикла в шаблоне?
Комментарии:
1. Просто обратите внимание, что пакет шаблона был изменен с Go r60. Код в этом вопросе все равно будет выполняться (на данный момент) путем импорта «old / template» вместо «template».
2. Это описание нового пакета шаблонов только что появилось на Reddit: jan.newmarch.name/golang/template/chapter.html
Ответ №1:
Вы можете просто написать {Title}
.
Всякий раз, когда пакет шаблона обнаруживает идентификатор, он пытается найти его в текущем объекте, и если он ничего не находит, он обращается к родительскому объекту (вплоть до корня). @
Есть только в том случае, если вы не хотите получать доступ к текущему объекту в целом, а не к одному из его атрибутов.
Поскольку я тоже не привык к шаблонному пакету, я создал небольшой пример:
type Category struct {
Title string
Count int
}
func main() {
tmpl, _ := template.Parse(`
{.repeated section Categories}
<p>{Title} ({Count})</p>
{.end}
`, nil)
categories := []Category{
Category{"Foo", 3},
Category{"Bar", 5},
}
tmpl.Execute(os.Stdout, map[string]interface{} {
"Categories": categories,
})
}