Шаблон механизма шаблонов Golang/Revel с переменной

Есть ли способ передать повторяющуюся переменную в шаблон Golang/Revel?

Например, в "header.html" у меня есть

{{range .templates}}
    {{template "something" .}}
{{end}}

Как я могу использовать текущий индекс из массива в качестве аргумента для шаблона? Я попытался встроить еще один {{.}}, как показано в примерах Revel, но это приводит к ошибке компиляции шаблона. Будет ли переменная чем-то вроде $i?

Например, перебор в Revel делается так

{{range .messages}}
    <p>{{.}}</p>
{{end}}

Однако я читал, что . означает ноль.... как это работает в Ревеле?


person dreadiscool    schedule 17.02.2016    source источник
comment
Я думаю, что все части здесь, но у меня нет возможности проверить их достаточно, чтобы быть уверенным в ответе. По существу: перебрать диапазон с помощью len(.templates) и использовать индексирование для получения значений   -  person Adam Smith    schedule 17.02.2016
comment
Есть ли более идиоматический способ сделать это? Я обновил вопрос с подробностями   -  person dreadiscool    schedule 17.02.2016


Ответы (1)


Если я правильно понимаю ваш вопрос, вы можете использовать встроенный range для получения индекса, а затем передать его в шаблон следующим образом:

{{range $i, $t := .templates}}
   {{template "Template.html" $i}}
{{end}}

Итак, если переменная templates была определена следующим образом:

templates := []string{"One", "Two"}

и Template.html содержит:

This is from Template.html: {{ . }}<br>

Тогда окончательный вывод будет:

This is from Template.html: 0<br>
This is from Template.html: 1<br>
person Herman Schaaf    schedule 17.02.2016
comment
Закрыть, но я хочу указать имя шаблона на основе элементов массива, а не аргументов, переданных статическому имени шаблона. Я пробовал использовать диапазон и просто делал {{template $t .}}, но мне это не нравится - person dreadiscool; 17.02.2016
comment
О, хорошо, я вижу. Ну, шаблоны Go требуют статический параметр для первого аргумента template. Так что переменные не подойдут, не без хакерства :) Но здесь есть тема, которая может вам помочь, если вы настроены на нее: github.com/revel/revel/issues/988 - person Herman Schaaf; 17.02.2016