目前,我正在使用https://play.golang.org/p/P1-sAo5Qy8
打印帖子归档日期虽然我认为按年打印更好:
如何在Posts PostDate上长期反转,以打印我想要的分组?它可以在模板中完成吗?
答案 0 :(得分:2)
在Posts
结构上实施sort.Interface,然后按相反的顺序对其进行排序。
type Posts struct {
Posts []Post
}
func (p Posts) Len() int {
return len(p.Posts)
}
func (p Posts) Less(i, j int) bool {
return p.Posts[i].PostDate.Before(p.Posts[j].PostDate)
}
func (p Posts) Swap(i, j int) {
p.Posts[i], p.Posts[j] = p.Posts[j], p.Posts[i]
}
和
posts := Posts{p}
sort.Sort(sort.Reverse(posts))
这将按照您想要的顺序为您提供帖子。
接下来,你必须使用一个闭包来实现一个func,这样你就可以检查当前年份是否与上一篇文章的年份相同,以便按年份进行分组。如果是,则仅输出帖子,否则输出带有年份的标题,然后输出帖子。
currentYear := "1900"
funcMap := template.FuncMap{
"newYear": func(t string) bool {
if t == currentYear {
return false
} else {
currentYear = t
return true
}
},
}
并使用它:
{{ range . }}{{ if newYear (.PostDate.Format "2006") }}<li><h1>{{ .PostDate.Format "2006" }}</h1></li>{{ end }}
查看工作示例on the Playground。