У меня странная проблема с шаблонами Go.По какой-то причине, когда я использую double range
, он перестает отображать все, что находится под ним в коде.
// Index.html
{{define "index"}}
{{range $k, $element := .Items}}
{{range $element}}
{{.Title}}
{{end}}
{{end}}
{{end}}
Это мой код Go:
data := IndexData{
Items: items,
}
IndexTemplate := template.Must(template.New("skeleton.html").Funcs(FuncTemplate).ParseFiles("skeleton.html", "index.html"))
IndexTemplate.ExecuteTemplate(w, "skeleton", data)
Он действительно показывает данные правильнона моей странице и ошибок нет.Единственная проблема здесь в том, что он останавливает отображение страницы после отображения последнего элемента.
В моем скелете я отображаю свои шаблоны следующим образом, в зависимости от того, какую страницу они посещают:
// Skeleton.html
{{define "skeleton"}}
{{block "index".}}{{end}}
{{block "account.register".}}{{end}}
{{block "account.login".}}{{end}}
{{block "account.profile".}}{{end}}
{{end}}
Почему прекращается рендеринг после отображения последнего элемента из диапазона?
РЕДАКТИРОВАТЬ:
Отображается только ошибка executing "index" at <$element>: range can't iterate over true
РЕДАКТИРОВАТЬ 2:
.Item
- это map[string]interface{}
, который содержит следующее:
map[result:[map[Title:Hello World2 Content:Lorem ipsum dolor sit amet2...] map[Title:Hello World Content:Lorem ipsum dolor sit amet...]] success:true]
Решение
Мне удалось решить эту проблему путем правильного возврата данных, которые мне нужно использовать без части success:true
, а также использования в качестве interface{}
, поэтому мне не нужно использовать 2 контура диапазона.