之前的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>


