栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

页面分页功能---自定义封装(python)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

页面分页功能---自定义封装(python)

自定义分页功能封装类:

class PageInfo(object):
    ''' 自定义分页功能 '''
    def __init__(self, current_page, all_count, per_page, page_url, show_page=7):
        try:
            self.current_page = int(current_page)   # 想要切换的页码数
        except Exception as e:
            self.current_page = 1
        # print(current_page, all_count, per_page, page_url)
        self.all_count = all_count         # 数据的总行数
        self.per_page = per_page           # 页面每页显示总条数
        self.page_url = page_url           # 页面的url
        self.show_page = show_page         # 配置页面行页码显示个数

        # 获取所有的页码数
        a, b = divmod(all_count, per_page)
        if b:
            a += 1
        self.all_pager = a     # 所有的页码数

    def start(self):
        ''' 对数据进行切分,获取每页数据的开始位置   '''
        return (self.current_page-1) * self.per_page

    def end(self):
        ''' 对数据进行切分,获取每页数据的结束位置    '''
        return self.current_page * self.per_page

    def pager(self):
        ''' 处理页码,直接传入页面模板中使用 '''
        page_list = []

        # 获取点前页码的左右页码个数
        haif = int((self.show_page-1)/2)

        # 处理页码不同情况
        if self.all_pager < self.show_page:
            # 1.如果数据总页码 < 设置的show_page 情况
            begin = 1
            stop = self.all_pager + 1
        # 2.如果数据总页数 > 设置的show_page 情况
        else:
            if self.current_page <= haif:
                # 3.如果当前页 <= haif 情况,就固定显示页码
                begin = 1
                stop = self.show_page + 1
            else:
                if self.current_page + haif > self.all_pager:
                    # 4.如果当前选中的页码 + 其他显示的页码 > 总页码 情况
                    # begin = self.current_page - haif            # 方式一:结尾时只显示部分页码
                    begin = self.all_pager - self.show_page + 1   # 方式二:结尾时固定显示show_page个页码
                    stop = self.all_pager + 1
                else:
                    begin = self.current_page - haif
                    stop = self.current_page + haif + 1

        # 加上一页标签
        if self.current_page == 1:
            previous_page = "
  • 上一页
  • " else: previous_page = "
  • 上一页
  • ".format(self.page_url, self.current_page-1) page_list.append(previous_page) # 向页面显示页码数 for i in range(begin, stop): if i == self.current_page: temp = "
  • {1}
  • ".format(self.page_url, i) else: temp = "
  • {1}
  • ".format(self.page_url, i) page_list.append(temp) # 加下一页标签 if self.current_page == self.all_pager: next_page = "
  • 下一页
  • " else: next_page = "
  • 下一页
  • ".format(self.page_url, self.current_page+1) page_list.append(next_page) return ''.join(page_list)

    实际应用案例:

    # urls.py
    from django.urls import re_path
    from app01 import views
    urlpatterns = [   re_path('custom.html$', views.custom), ]
    
    # app01views.py
    from django.views import View
    from django.shortcuts import render
    from app01 import models
    def custom(request):
        # 用户当前想要访问的页码
        current_page = request.GET.get('page')
        # current_page = int(current_page)
        all_count = models.Test01.objects.all().count()  # 数据的总个数
    	# 调用分页类
        page_info = PageInfo(current_page, all_count, 10, '/custom.html')
    
        # 数据库中获取需要的数据
        user_list = models.Test01.objects.all()[page_info.start():page_info.end()]
    
        return render(request, 'custom.html', {'user_list': user_list, 'page_info': page_info})
    
    
    class PageInfo(object):
        '''分页功能 '''
        def __init__(self, current_page, all_count, per_page, page_url, show_page=11):
            try:
                self.current_page = int(current_page)   # 想要切换的页码数
            except Exception as e:
                self.current_page = 1
            print(current_page, all_count, per_page, page_url)
            self.all_count = all_count         # 数据的总行数
            self.per_page = per_page           # 页面每页显示总条数
            self.page_url = page_url           # 页面的url
            self.show_page = show_page         # 配置页面行页码显示个数
    
            # 获取所有的页码数
            a, b = divmod(all_count, per_page)
            if b:
                a += 1
            self.all_pager = a     # 所有的页码数
    
        def start(self):
            ''' 对数据进行切分,获取每页数据的开始位置   '''
            return (self.current_page-1) * self.per_page
    
        def end(self):
            ''' 对数据进行切分,获取每页数据的结束位置    '''
            return self.current_page * self.per_page
    
        def pager(self):
            ''' 处理页码,直接传入页面模板中使用 '''
            page_list = []
    
            haif = int((self.show_page-1)/2)  # 获取点前页码的左右页码个数
    
            # 处理页码不同情况
            # 1.如果数据总页码 < 设置的show_page 情况
            if self.all_pager < self.show_page:
                begin = 1
                stop = self.all_pager + 1
            # 2.如果数据总页数 > 设置的show_page 情况
            else:
                if self.current_page <= haif:
                    # 3.如果当前页 <= haif,就固定显示页码
                    begin = 1
                    stop = self.show_page + 1
                else:
                    if self.current_page + haif > self.all_pager:
                        # 4.如果当前页码+右边的页码 > 总页码
                        begin = self.all_pager - self.show_page + 1 
                        stop = self.all_pager + 1
                    else:
                        begin = self.current_page - haif
                        stop = self.current_page + haif + 1
    
            # 加上一页按钮
            if self.current_page == 1:
                previous_page = "
  • 上一页
  • " else: previous_page = "
  • 上一页
  • ".format(self.page_url, self.current_page-1) page_list.append(previous_page) # 向页面显示页码数 for i in range(begin, stop): if i == self.current_page: temp = "
  • {1}
  • ".format(self.page_url, i) else: temp = "
  • {1}
  • ".format(self.page_url, i) page_list.append(temp) # 加下一页按钮 if self.current_page == self.all_pager: next_page = "
  • 下一页
  • " else: next_page = "
  • 下一页
  • ".format(self.page_url, self.current_page+1) page_list.append(next_page) return ''.join(page_list)
    
    
    
        
        自定义分页功能
     
        
    
    
        

    分页

      {% for row in user_list %}
    • {{ row.title }} | {{ row.username }}
    • {% endfor %}
    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/487971.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号