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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当正确显示所有内容时,范围不能迭代为真?相关的知识,希望对你有一定的参考价值。

我对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:

.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个范围循环。

答案

外部范围使用键resultsuccess在地图上迭代。内部范围尝试迭代这些键的值。 success的值是true。一个布尔是不可能的。

仅在result上更改模板范围:

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

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

以上是关于当正确显示所有内容时,范围不能迭代为真?的主要内容,如果未能解决你的问题,请参考以下文章

将 HashMap 的创建迭代为另一个 HashMap 中的值

为什么python将字节迭代为整数?

如何简化这个 python 迭代?

UICollectionView ReloadData 未正确显示内容

启动片段时隐藏ActionBar

当片段具有选项菜单时,Android Chrome Cast 介绍 Overlay 的行为不正确