迭代模板切片中可变数量的项目

Iterate over a variable number of items in a template slice

在搜索了大量文档和论坛主题后,我没有找到使用 go 模板引擎迭代切片中可变数量项目的解决方案。

我的情况如下:

我设置了 3 个结构,我将 User 传递给 html 页面

type User struct {
    Name    string 
    Foos    []Foo
}

type Foo struct {
    Name        string 
    Description string 
    Bars     []Bar
}

type Bar struct {
    Name    string 
}

我只想迭代 User 中每个 Foo 中的前 3 个 Bars,但我还需要考虑每个 Bar 的可能性包含少于 3 个项目。

以下将遍历所有 Bars,但我只想列出最多 3 个,当然如果切片中只有那么多,则只列出 1 或 2。

{{range .Foos}}
<div>
    <h3>{{.Name}}</h3>
    <h4>{{.Description}}</h4>
    <ol>
        {{range .Bars}}
        <li> {{.Name}} </li>
        {{end}}
    </ol>
</div>
{{end}}

用go模板引擎可以实现吗?任何帮助将不胜感激。

如评论中所述,您可以在将切片发送到模板之前 trim 切片,但如果它是您需要在之后继续使用的嵌套结构的一部分,那可能会出现问题。

另一种选择是避免在循环内的索引上处理超过 3 个具有 if 值的元素:

{{range $i, $val := .Bars}}
    {{if le $i 3}}<li> {{$val.Name}} </li>{{end}}
{{end}}