这里说的分页是指大量数据显示时,每页固定数量数据的输出,即是cms中的列表页分页。
Beego已经有内置的分页功能,但文档里面没有详细说明, 具体的package在
github.com/astaxie/beego/utils/pagination
具体使用方法
先是导入上面的包, 然后在需要的地方新建一个paginator
// Category 栏目页面
func (c *Blog) Category() {
page, _ := c.GetInt("p", 1)
pagesize = 15
// ....
// 中间过程略
// ....
list, count := models.GetPosts(qs.Filter("Cat__in", ids), page, pagesize)
// 此处新建一个内置的paginator, 三个参数是,当前的request、每页显示多少、总数是多少,
// 并把paginator传到模板待用
p := pagination.NewPaginator(c.Ctx.Request, pagesize, count)
c.Data["posts"] = list
c.Data["paginator"] = p
c.TplName = "category.html"
}
paginator通过当前request中的p参数(当前页),及总数、每页显示数,计算总页面数等,并有内置一些方法,可以判断是否当前页等。并能根据request的url,自动生成对应页码的链接。
模板中的应用:
{{if gt .paginator.PageNums 1}}
<ul class="pagination pagination-sm">;
{{if .paginator.HasPrev}}
<li>;<a href="{{.paginator.PageLinkFirst}}">;First</a>;</li>;
<li>;<a href="{{.paginator.PageLinkPrev}}"><</a>;</li>;
{{else}}
<li class="disabled">;<a>;First</a>;</li>;
<li class="disabled">;<a><</a>;</li>;
{{end}}
{{range $index, $page := .paginator.Pages}}
<li{{if $.paginator.IsActive .}} class="active"{{end}}>;
<a href="{{$.paginator.PageLink $page}}">;{{$page}}</a>;
</li>;
{{end}}
{{if .paginator.HasNext}}
<li>;<a href="{{.paginator.PageLinkNext}}">></a>;</li>;
<li>;<a href="{{.paginator.PageLinkLast}}">;Last</a>;</li>;
{{else}}
<li class="disabled">;<a>></a>;</li>;
<li class="disabled">;<a>;Last</a>;</li>;
{{end}}
</ul>;
{{end}}