python实现分页插件

复制代码
class Pages:
    def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):#pager_num 这是页码
        self.current_page = current_page
        self.data_count = data_count
        self.per_page_count = per_page_count
        self.pager_num = pager_num
        pass

    @property
    def start(self):
        return (self.current_page-1) * self.per_page_count

    @property
    def end(self):
        return self.current_page * self.per_page_count

    @property
    def all_count(self):
        v, s = divmod(self.data_count, self.per_page_count)
        if s > 0:
            v += 1
        return v

    def page_str(self, base_url):
        pg = []
        if self.all_count < self.pager_num:
            start_index = 1
            ent_index = self.all_count
        else:
            if self.current_page < (self.pager_num + 1) / 2:  # 最前面的数,当小于6时会出现的一种情况
                start_index = 1
                ent_index = self.pager_num
            elif self.current_page + 5 > self.all_count:  # 最后面的数,当加上5大于总页数时会出现的一种情况
                start_index = self.all_count - self.pager_num + 1
                ent_index = self.all_count
            else:
                start_index = self.current_page - ((self.pager_num - 1) / 2)
                ent_index = self.current_page + ((self.pager_num - 1) / 2)

        pre_page = "<a href='%s?p=%s' class='page'>上一页</a>" % \
                   (base_url, self.current_page - 1 if self.current_page > 1 else 1)

        for a in range(int(start_index), int(ent_index)+1):
            if a == self.current_page:
                temp = "<a href='%s?p=%s' class='page active'>%s</a>" % (base_url, a, a)
                pg.append(temp)
            else:
                temp = "<a href='%s?p=%s' class='page'>%s</a>" % (base_url, a, a)
                pg.append(temp)

        next_page = "<a href='%s?p=%s' class='page'>下一页</a>" % \
                    (base_url, self.current_page + 1 if self.current_page < self.all_count else self.all_count)

        jump = """
            <input id="jump" type="text"><button onclick="jump(this)">跳转</button>
            <script>
                function jump(node){
                    location.href= '%s?p='+ $("#jump").val()
                }
            </script>
        """ % base_url
        page_str = pre_page+"".join(pg)+next_page+jump
        return page_str
复制代码

使用例子:

def show_vedio(request):
    current_page = request.GET.get("p", 1)
    current_page = int(current_page)
    page_obj = Pages(current_page, len(LIST))
    lists = LIST[page_obj.start:page_obj.end]

    return render(request, "blogs/internet/show_video.html", {"list": lists, "page": page_obj.page_str("/blogs/video/")})

前端:

1
2
3
4
5
6
7
8
9
{{ "分页 "|defined_filter:"您会做 了吗!" }}
    <ul>
      {% for i in list %}
        <li>{{ i }}</li>
    {% endfor %}
 
    </ul>
 
    {{ page|safe }}

  

posted @   吖水的程序路  阅读(514)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示