Range не может перебрать true, когда он все отображает правильно? - PullRequest
0 голосов
/ 26 сентября 2018

У меня странная проблема с шаблонами 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 контура диапазона.

1 Ответ

0 голосов
/ 26 сентября 2018

Внешний диапазон перебирает карту с ключами result и success.Внутренний диапазон пытается перебрать значения для этих ключей.Значение для success равно true.Невозможно ранжировать на бул.

Изменение диапазона шаблона только на result:

{{define "index"}}
        {{range .Items.result}}
            {{.Title}}
        {{end}}
{{end}}

Кроме того, измените код, чтобы проверить и обработать ошибку, возвращаемую из ExecuteTemplate.

...