我有一个带n
元素的向量。我正在使用它来渲染模板中的项目。但我需要只渲染5个第一个元素。请注意,矢量中的元素少于5个,在这种情况下将呈现所有元素。有没有办法在模板中做到这一点?
{{range .Categorias}}
<li class="nav-item">
{{.Nome}}
</li>
{{end}}
答案 0 :(得分:4)
最简单的方法是只传递5个元素,因此模板中不需要任何逻辑。
如果您还将索引存储在{{range}}
操作中,也可以在模板中执行此操作。然后,您可以使用{{if}}
操作来检查索引,并且只有在索引小于5时才呈现{{if}}
的正文:
{{range $i, $e := .Categorias}}{{if lt $i 5}}
<li class="nav-item">
{{.Nome}}
</li>
{{end}}{{end}}
以下是一个展示它的简单示例:
func main() {
t := template.Must(template.New("").Parse(src))
numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
if err := t.Execute(os.Stdout, numbers); err != nil {
panic(err)
}
}
const src = `{{range $i, $e := .}}{{if lt $i 5}}{{.}} {{end}}{{end}}`
输出(在Go Playground上尝试):
0 1 2 3 4
请注意,在Go 1.10中会有新的{{break}}
和{{continue}}
操作,这将为此提供另一种更好的解决方案。
看起来像这样:
{{range $i, $e := .Categorias}}
<li class="nav-item">
{{.Nome}}
</li>
{{if eq $i 4}}{{break}}{{end}}{{end}}
这个新的{{break}}
操作将提供更好的解决方案,因为上述{{range}}
操作最多只迭代5个元素(而没有{{break}}
的其他解决方案必须迭代所有元素,只是索引&gt; = 5的元素不会被渲染。