我正在 Go 中为学校项目构建一个简单的论坛,并且我正在将数据结构传递给模板以显示子论坛中的所有帖子。我传递给模板的数据是这样的:type Data struct { ID int // ID of the subforum User User // logged-in user Posts []Post // all the posts of the subforum}数据结构中的 Post 结构如下所示:type Post struct { ID int Title string Content string Date time.Time [...] Author User Comments []Comment}注释结构类似于 Post 结构。当我显示所有帖子的列表时,我还想显示回复的数量和上次回复的日期/时间。在我的HTML模板中,我可以得到这样的回复数量:{{range .Posts}} <p>Replies: {{ len .Comments }}</p>{{ end }}...但我似乎无法弄清楚注释数组中最后一个元素的日期。我知道你可以得到第一个元素与索引关键字和值'0',但我不能使用(len .注释 -1) 在模板中获取最后一个元素,因为 '-' 是禁止的字符。我可能会创建第二个函数来使我的注释按SQLite数据库的降序排序,但我想知道是否有一种简单的方法来处理Go模板中的索引。
2 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
使用 Go 模板没有一种干净的方法来执行此操作,但是这是一种解决方法。更简单的解决方法是在将结构传递给模板生成器之前将最后一项添加到结构中。您正在做的是将复杂的逻辑移出模板(模板不是为执行此操作而设计的)并移动到Go代码中。
type Post struct {
....
Comments []Comment
LastComment Comment
}
然后在您的模板中,只需执行
{{ .LastComment }}
开心每一天1111
TA贡献1836条经验 获得超13个赞
您可以使用模板中的自定义函数来获取最后一个元素:
fmap := template.FuncMap{
"lastElem": func(comments []Comment) Comment {
return comments[len(comments)-1]
},
}
tmpl, err := template.New("tmpl").Funcs(fmap).Parse(tpl)
然后在模板中将其用作:
{{range .Posts}}
<p>Replies: {{ lastElem .Comments }}</p>
{{ end }}
- 2 回答
- 0 关注
- 956 浏览
添加回答
举报
0/150
提交
取消