之前的beego课程实战,列表分页那里后来发现有点bug,就重新写了一下,这里贴出来

// 分页列表
func (n *AgricultureController) List() {
   current_page, _ := n.GetInt("page", 1)
   // 查询
   kw := n.GetString("kw")
   pagesize := 10

   // 这是分页封装的方法,我会放在最下面
   count,agricultures := products.AgricultureListModel(current_page, pagesize,kw)

      // 这是封装的方法,我会放在最下面
   num_pages := utils.GetPageNum(count, pagesize)
    
      // 这是封装的方法,我会放在最下面
   left_pages, right_pages, left_has_more, right_has_more := utils.Get_pagination_data(num_pages, current_page, 2)
   has_previous, has_next, previous_page_number, next_page_number := utils.HasNext(current_page, num_pages)

   n.Data["left_pages"] = left_pages         //左边页码数[]int
   n.Data["right_pages"] = right_pages       //右边页码数[]int
   n.Data["left_has_more"] = left_has_more   //左边是否有页码 bool
   n.Data["right_has_more"] = right_has_more //右边是否有页码 bool

   n.Data["has_previous"] = has_previous      //是否有上一页 bool
   n.Data["has_next"] = has_next          //是否有下一页 bool
   n.Data["previous_page_number"] = previous_page_number //上一页页码 int
   n.Data["next_page_number"] = next_page_number         //下一页页码 int

   n.Data["num_pages"] = num_pages //总页数
   n.Data["page"] = current_page   //当前页

   n.Data["count"] = count //总数量
   n.Data["agricultures"] = agricultures
   n.Data["kw"] = kw

   n.TplName = "agriculture/agriculture_list.html"
}




// 封装的列表分页
func AgricultureListModel(page, pageSize int,kw string) (count int64,agricultures []Agriculture) {
   o := orm.NewOrm()

   qs := o.QueryTable(new(Agriculture))


   if kw != ""{   // 有查询条件的
      // 总数
      count,_ = qs.Filter("is_delete",0).Filter("id_card__contains",kw).Count()
      qs.Filter("is_delete",0).Filter("id_card__contains",kw).Limit(pageSize).Offset((page - 1) * pageSize).RelatedSel().All(&agricultures)
   }else {
      count,_ = qs.Filter("is_delete",0).Count()
      qs.Filter("is_delete",0).Limit(pageSize).Offset((page - 1) * pageSize).RelatedSel().All(&agricultures)

   }

   return count,agricultures
}


// utils的封装方法
func GetPageNum(count int64, pagesize int) int {
   pagenum := int(math.Ceil(float64(count) / float64(pagesize)))
   return pagenum
}


//utils的封装方法,总页数,当前页,前后页数
func Get_pagination_data(num_pages, current_page, around_count int) (left_pages, right_pages []int, left_has_more, right_has_more bool) {

   if current_page <= around_count+2 {
      left_pages = Rangelist(1, current_page, left_pages)
   } else {
      left_has_more = true
      left_pages = Rangelist(current_page-around_count, current_page, left_pages)
   }

   if current_page >= num_pages-around_count-1 {
      right_pages = Rangelist(current_page+1, num_pages+1, right_pages)
   } else {
      right_has_more = true
      right_pages = Rangelist(current_page+1, current_page+around_count+1, right_pages)

   }

   return

}


// 有没有前一页,有没有下一页,前面的页码数,后面的页码数
func HasNext(page, num_pages int) (has_previous, has_next bool, previous_page_number, next_page_number int) {
   if page == 1 && num_pages == page {
      has_previous = false
      has_next = false
      next_page_number = 1
      previous_page_number = 1
   } else if page == 1 && num_pages > page {
      has_previous = false
      has_next = true
      previous_page_number = page
      next_page_number = page + 1
   } else if page > 1 && num_pages > page {
      has_previous = true
      has_next = true
      previous_page_number = page - 1
      next_page_number = page + 1
   } else if page > 1 && page == num_pages {
      has_previous = true
      has_next = false
      previous_page_number = page - 1
      next_page_number = page
   }
   return
}



//前端使用,把url换成你的列表的url即可
<div id="test-laypage-demo7">
{{if .count}}
    <div class="layui-box layui-laypage layui-laypage-default"
         id="layui-laypage-1">
        <span class="layui-laypage-count">共 {{.count}} 条</span>
    {{if .has_previous}}
        <a
                href="{{urlfor "AgricultureController.List"}}/?page={{.previous_page_number}}"
                value="上一页" onclick="pagechange(this)">上一页</a>
    {{else}}
        <a href="javascript:void(0);" style="cursor: not-allowed">上一页</a>
    {{end}}

    {{if .left_has_more }}
        <a
                href="{{urlfor "AgricultureController.List"}}/?page=1"
                value="1" onclick="pagechange(this)">1</a>
        <a href="">...</a>
    {{end}}

    {{range .left_pages}}
        <a
                href="{{urlfor "AgricultureController.List"}}/?page={{.}}"
                value="{{.}}" onclick="pagechange(this)">{{.}}</a>
    {{end}}

        <a class="currentpage" style="color: red"
           href="{{urlfor "AgricultureController.List"}}/?page={{.page}}"
           value="{{.page}}" onclick="pagechange(this)">{{.page}}</a>


    {{range .right_pages }}
        <a
                href="{{urlfor "AgricultureController.List"}}/?page={{.}}"
                value="{{.}}" onclick="pagechange(this)">{{.}}</a>
    {{end}}

    {{if.right_has_more }}
        <a href="">...</a>
        <a
                href="{{urlfor "AgricultureController.List"}}/?page={{.num_pages}}"
                value="{{.num_pages}}"
                onclick="pagechange(this)">{{.num_pages}}</a>
    {{end}}

    {{if .has_next}}
        <a
                href="{{urlfor "AgricultureController.List"}}/?page={{.next_page_number}}"
                value="{{.next_page_number}}"
                onclick="pagechange(this)">下一页</a>
    {{else}}
        <a href="javascript:void(0);" style="cursor: not-allowed">下一页</a>
    {{end}}


    </div>
{{end}}
</div>