Python中的分页管理

Posted 吴先生不爱吃辣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中的分页管理相关的知识,希望对你有一定的参考价值。

1,自定义分页

技术图片
#utils文件夹下的page.py文件

class PagerHelper:
    #total_count总的页数,current_page当前页数,base_url页面用来分页显示的URL如http://127.0.0.1:8000/classes.html/?p=71
    #base_url为/calsses.html per_page每一页有多少条数据
    def __init__(self,total_count,current_page,base_url,per_page=10):
        self.total_count = total_count
        self.current_page = current_page
        self.base_url = base_url
        self.per_page = per_page

    @property
    def db_start(self):
        return (self.current_page -1) * self.per_page

    @property
    def db_end(self):
        return self.current_page * self.per_page
    #返回总的页数
    def total_page(self):
        v, a = divmod(self.total_count, self.per_page)
        if a != 0:
            v += 1
        return v
    #返回页码的HTML,默认是11页显示,小于11页时1-总页数,
    #当前页小于6页时总显示1-11页,当前页加5(最后一页大于总页数时)显示(总页数-11,总页数)
    def pager_str(self):

        v = self.total_page()

        pager_list = []
        if self.current_page == 1:
            pager_list.append(<a href="javascript:void(0);">上一页</a>)
        else:
            pager_list.append(<a href="%s?p=%s">上一页</a> % (self.base_url, self.current_page - 1,))

        # 6,1:12
        # 7,2:13
        if v <= 11:
            pager_range_start = 1
            pager_range_end = v
        else:
            if self.current_page < 6:
                pager_range_start = 1
                pager_range_end = 11 + 1
            else:
                pager_range_start = self.current_page - 5
                pager_range_end = self.current_page + 5 + 1
                if pager_range_end > v:
                    pager_range_start = v - 10
                    pager_range_end = v + 1

        for i in range(pager_range_start, pager_range_end):
            if i == self.current_page:
                pager_list.append(<a class="active" href="%s?p=%s">%s</a> % (self.base_url, i, i,))
            else:
                pager_list.append(<a href="%s?p=%s">%s</a> % (self.base_url, i, i,))

        if self.current_page == v:
            pager_list.append(<a href="javascript:void(0);">下一页</a>)
        else:
            pager_list.append(<a href="%s?p=%s">下一页</a> % (self.base_url, self.current_page + 1,))

        pager = "".join(pager_list)
        return pager
自定义分页

在函数中调用

技术图片
#获取数据
total_count = 总的页数
current_page = 当前页数
 /classes.html --> 当前分页的url
5 每一页显示数据,默认是10

######
from utils.page import PagerHelper
        obj = PagerHelper(total_count, current_page, /classes.html,5)
        pager = obj.pager_str()

        cls_list = models.Classes.objects.all()[obj.db_start:obj.db_end]

       # current_user = request.session.get(‘username‘)
        return render(request,
                      classes.html,
                      {username: current_user, cls_list: cls_list, str_pager: pager})
在views中使用

 

以上是关于Python中的分页管理的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中的分页操作结合python

ThinkPHP3.2.3自带的分页用法--很简单实用

删除有机群组人员列表中的分页

Oracle中的分页代码

CouchDB 中的分页?

Django中的分页器以及手绘验证码