beego新版本的分页求助?



 package controllers
 import "github.com/astaxie/beego/utils/pagination"
 type PostsController struct {
   beego.Controller
 }
 func (this *PostsController) ListAllPosts() {
     // sets this.Data["paginator"] with the current offset (from the url query param)
     postsPerPage := 20
     paginator := pagination.SetPaginator(this.Ctx, postsPerPage, CountPosts())
     // fetch the next 20 posts
     this.Data["posts"] = ListPostsByOffsetAndLimit(paginator.Offset(), postsPerPage)
 }

CountPosts()参数是不是数据库表中的count计数?
ListPostsByOffsetAndLimit(paginator.Offset(), postsPerPage) 这个方法怎么理解怎么运用?里面的参数代表啥意思?

beego go

强力观光膜拜团 10 years, 4 months ago

刚看了下源码, paginator.Offset() 得到的是当前的偏移条数,即 limit [offset,] count 中的offset,在beego中是这样实现的 (p.Page() - 1) * p.PerPageNums ,其中PerPageNums即你传入的postsPerpage,而p.Page()的实现是


 func (p *Paginator) Page() int {
    if p.page != 0 {
        return p.page
    }
    if p.Request.Form == nil {
        p.Request.ParseForm()
    }
    p.page, _ = strconv.Atoi(p.Request.Form.Get("p"))
    if p.page > p.PageNums() {
        p.page = p.PageNums()
    }
    if p.page <= 0 {
        p.page = 1
    }
    return p.page
}

很明显,这里需要你在请求里传入一个p来表示当前页码,而每页数量则是你指定的20,举个例子,假设你这个接口名字是posts,那你希望得到第101-120条的接口即为 http://host.com/posts?p=6

残日浮生夏 answered 10 years, 4 months ago

Your Answer