首页 >> Golang >> 内容页

Beego分页处理beego内置分页功能使用

这里说的分页是指大量数据显示时,每页固定数量数据的输出,即是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}}">&lt;</a>;</li>;
    {{else}}
        <li class="disabled">;<a>;First</a>;</li>;
        <li class="disabled">;<a>&lt;</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}}">&gt;</a>;</li>;
        <li>;<a href="{{.paginator.PageLinkLast}}">;Last</a>;</li>;
    {{else}}
        <li class="disabled">;<a>&gt;</a>;</li>;
        <li class="disabled">;<a>;Last</a>;</li>;
    {{end}}
</ul>;
{{end}}