我正在尝试创建一个html模板,用于通过html/template
Go包显示帖子。
我还想在我的页面上进行分页,每页显示5个帖子。
所以我从我的帖子库中取出帖子计数,将其除以每页的帖子值并将其四舍五入(ceil)。这是当前可用帖子的总页数。
我将总页数传递给我的html模板。 现在,在我的html模板中,我需要显示页面按钮从1到总数。
在text/html
包中有一个关于如何使用管道的精彩文档,但我没有找到创建简单循环的任何示例。
我得到了解决方案,但我不确定它是好的。 我不仅可以传递模板的总页数,还可以传递给可用页面的数组,因此在我的模板中我可以执行以下操作:
{{range .pages}}
<div class="page"><a href="/posts/{{.}}">{{.}}</a></div>
{{end}}
但也许有更好的方法来做到这一点,而不是传递一个页面数组? 我也知道将自定义函数传递给模板的可能性。这可能是一个解决方案吗?
答案 0 :(得分:1)
规则是模板必须包含尽可能小的逻辑(以及原生函数和控件如此限制在模板包中的原因)。
您应该通过将数据放入专用结构(传递给模板)来将数据准备到控制器中。然后,您可以按照预期的方式使用范围函数将此结构(由变量和数组组成)显示到模板中。
答案 1 :(得分:0)
package main
import "html/template"
import "os"
type data struct {
Url string
Title string
}
type show struct {
Pages []data
}
const html = `<html>
{{range .Pages}}
<div class="page"><a href="/posts/{{.Url}}">{{.Title}}</a>
</div>
{{end}}
</html>`
func show_template() {
webpage, _ := template.New("template").Parse(html)
mydata := []data{{
Url: "page-1.html",
Title: "go to page 1",
}, {
Url: "page-2.html",
Title: "go to page 2",
}, {
Url: "page-3.html",
Title: "go to page 3",
}, {
Url: "page-3.html",
Title: "go to page 3",
}}
web_data := show{mydata}
webpage.Execute(os.Stdout, web_data)
}
func main() {
show_template()
}
这就是结果..
<html>
<div class="page"><a href="/posts/page-1.html">go to page 1</a></div>
<div class="page"><a href="/posts/page-2.html">go to page 2</a></div>
<div class="page"><a href="/posts/page-3.html">go to page 3</a></div>
<div class="page"><a href="/posts/page-3.html">go to page 3</a></div>
</html>