迭代模板切片中可变数量的项目
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}}
在搜索了大量文档和论坛主题后,我没有找到使用 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}}