正确显示所有内容时,范围不能迭代true?

时间:2018-09-26 17:22:52

标签: go go-templates

我对Go模板有一个奇怪的问题。由于某些原因,当我使用双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:

.Itemmap[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 :(得分:1)

外部范围使用键List<Box<?>>List<Box>在地图上进行迭代。内部范围尝试迭代这些键的值。 result的值为success。不可能以布尔值为准。

仅在success上更改模板范围:

true

此外,修改代码以检查和处理从result返回的错误。