我正在 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 關注
- 1000 瀏覽
添加回答
舉報
0/150
提交
取消