• 自定义Django分页器


    #!/usr/bin/env python
    # encoding: utf-8
    '''
    @author: anthony.wang
    @license: (C) Copyright 2000-2089, Node Supply Chain Manager Corporation Limited.
    @contact: ianthony7@163.com
    @software: Pycharm
    @file: pager.py
    @time: 2020/10/22 14:25
    @desc:
    '''
    
    """"
    使用文档:
        pager = Pagination(当前页码数,总数据量,生成的URL)
        # 切片取数据
        all_depart = models.Department.objects.all()[pager.start:pager.end]
        # 生成li标签
        pager.page_html
    
        {{ page_html|safe }}
    
    """
    
    
    class Pagination:
        def __init__(self, page, total_num, url, per_num=10, max_show=11):
            try:
                page = int(page)
                if page < 1:
                    page = 1
            except Exception as e:
                page = 1
            self.url = url
            self.page = page
            self.total_num = total_num
            self.per_num = per_num
            # 总页码数
            self.total_page_num, more = divmod(self.total_num, self.per_num)
            if more:
                self.total_page_num += 1
            # 最多显示页码数
            self.max_show = max_show
            half_show = self.max_show // 2
    
            self.page_start = self.page - half_show  # 1
            self.page_end = self.page + half_show  # 11
    
            # 数据量少,不够生成11个页面的时候
            if self.total_page_num < self.max_show:
                self.page_start = 1
                self.page_end = self.total_page_num
            else:
                # 可以生成11个页码
                #  1 2 3 4 5
                if self.page <= half_show:
                    self.page_start = 1
                    self.page_end = self.max_show
                elif self.page + half_show > self.total_page_num:
                    self.page_start = self.total_page_num - self.max_show + 1
                    self.page_end = self.total_page_num
                else:
                    self.page_start = self.page - half_show
                    self.page_end = self.page + half_show
    
        @property
        def start(self):
            return (self.page - 1) * 10
    
        @property
        def end(self):
            return self.page * 10
    
        @property
        def page_html(self):
            page_list = []
            if self.page == 1:
                page_list.append('<li class="disabled"> <span aria-hidden="true">&laquo;</span>  </li>')
            else:
                page_list.append('<li><a href="{}?page={}">&laquo;</a></li>'.format(self.url, self.page - 1))
    
            for i in range(self.page_start, self.page_end + 1):
                if i == self.page:
                    page_list.append('<li class="active"><a href="{}?page={}">{}</a></li>'.format(self.url, i, i))
                else:
                    page_list.append('<li><a href="{}?page={}">{}</a></li>'.format(self.url, i, i))
    
            if self.page == self.total_page_num:
                page_list.append('<li class="disabled"> <span aria-hidden="true">»</span>  </li>')
            else:
                page_list.append('<li><a href="{}?page={}">»</a></li>'.format(self.url, self.page + 1))
    
            return ''.join(page_list)
    
    
    <nav aria-label="Page navigation">
            <ul class="pagination">
                <li><a href="/crm/depart/list/?page=1">«</a></li>
                {{ page_html|safe }}
                <li><a href="/crm/depart/list/?page={{ total_page_num }}">»</a></li>
            </ul>
     </nav>
    
    #!/usr/bin/env python
    # encoding: utf-8
    '''
    @author: anthony.wang
    @license: (C) Copyright 2000-2089, Node Supply Chain Manager Corporation Limited.
    @contact: ianthony7@163.com
    @software: Pycharm
    @file: depart.py
    @time: 2020/10/20 19:26
    @desc:
    '''
    from django.shortcuts import render, reverse, redirect, HttpResponse
    from crm import models
    from django import forms
    from crm.utils.pager import Pagination
    
    def depart_list(request):
        page = request.GET.get('page')
        count = models.Department.objects.all().count()
        pager = Pagination(page,count,request.path_info)
    
        all_depart = models.Department.objects.all()[pager.start:pager.end]
        return render(request, 'depart_list.html',
                          {'all_depart': all_depart, 'page_html': pager.page_html})
    
  • 相关阅读:
    Linux中history执行历史命令方法
    Linux中返回上一次目录
    Linux的vi编辑模式下常用快捷键
    [Android] TextView上同时显示图标和文字
    [Android] macOS的Android Studio快捷键
    [Android] 转-RxJava+MVP+Retrofit+Dagger2+Okhttp大杂烩
    [iOS] 测试设备解决自签名证书问题
    [macOS] keychain的跳坑之旅!git拉取的权限问题
    [PHP] swoole在daemonize模式下,chdir失效问题
    [macOS] macOS下,VirtualBox安装CentOS7.4, 搭建nginx, mysql, PHP5.6&PHP7.1
  • 原文地址:https://www.cnblogs.com/ipyanthony/p/13860623.html
Copyright © 2020-2023  润新知