***自定义分页

路由分发(url):

from django.urls import path,include

from Management.views import pagers

urlpatterns = [
    path('admin/', admin.site.urls),
    path('pager/', pagers.pager,name='pager'),
]
url

分页自定义类(Class.py):

'''
TotalNumber:总个数
CurrentPage:当前页【1/2/3/4/5/6/7】
barsNumber:每页显示多少条【10条数据】
MaxPageNumber:最大显示多少个【1,2,3,4,5,6,7】
'''

class Pagination(object):
    def __init__(self,TotalNumber,CurrentPage,barsNumber=11,MaxPageNumber=7):
        self.Total_number=TotalNumber
        try:
            v = int(CurrentPage)
            if v<=0:
                v=1
            self.Current_page=v
        except Exception as e:
            self.Current_page = 1
        self.bars_number=barsNumber
        self.Max_pageNumber=MaxPageNumber

    def start(self):
        return (self.Current_page - 1) * self.bars_number

    def end(self):
        return self.Current_page * self.bars_number

    # 总页数
    @property
    def num_pages(self):
        '''
        总页数
        :return:
        '''
        a,b = divmod(self.Total_number,self.bars_number)
        if b==0:
            return a
        else:
            return a+1

    # 显示页码数
    def page_num_range(self):
        #总页数小于显示页码
        if self.num_pages < self.Max_pageNumber:
            return range(1,self.num_pages+1)
        #总页数很多
        part = int(self.Max_pageNumber/2)
        if self.Current_page <= part:
            return range(1,self.Max_pageNumber+1)
        if (self.Current_page+part) > self.num_pages:
            return range(self.num_pages-self.Max_pageNumber,self.num_pages+1)
        return range(self.Current_page-part,self.Current_page+part+1)

    # 返回页码给前端
    def page_str(self):
        page_list=[]
        # 首页
        first="<li><a href='/pager/?p=1'>首页</a></li>"
        page_list.append(first)
        # 上一页
        if self.Current_page ==1 :
            prev="<li><a href='#'>上一页</a></li>"
        else:
            prev="<li><a href='/pager/?p=%s'>上一页</a></li>" % (self.Current_page-1)
        page_list.append(prev)
        # 页码
        for i in self.page_num_range():
            if i == self.Current_page:
                temp = "<li class='active'><a href='/pager/?p=%s'>%s</a></li>" % (i, i)
            else:
                temp="<li><a href='/pager/?p=%s'>%s</a></li>" % (i,i)
            page_list.append(temp)
        # 下一页
        if self.Current_page == self.num_pages :
            next_page="<li><a href='#'>下一页</a></li>"
        else:
            next_page="<li><a href='/pager/?p=%s'>下一页</a></li>" % (self.Current_page+1)
        page_list.append(next_page)
        # 尾页
        end_page = "<li><a href='/pager/?p=%s'>尾页</a></li>" % self.num_pages
        page_list.append(end_page)

        return ''.join(page_list)
class

后台视图(Views):

from django.shortcuts import render

# 分页数据
USER_LIST=[]
for i in range(1,999):
    temp={'name':'root'+str(i),'age':i}
    USER_LIST.append(temp)

def pager(req):
    from Management.pager_Class import Pagination

    current_page=req.GET.get('p')
    page_obj=Pagination(999,current_page)

    data_list=USER_LIST[page_obj.start():page_obj.end()]
    return render(req,"pagers/pagers.html",{"data":data_list,"page_obj":page_obj})
View

前端页面(Html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">
</head>
<body>
    <ul>
        {% for row in data %}
            <li>{{ row.name }}-{{ row.age }}</li>
        {% endfor %}
    </ul>

    <nav aria-label="Page navigation">
      <ul class="pagination">
            {{ page_obj.page_str | safe }}
      </ul>
    </nav>
    
</body>
</html>
Html

 

posted @ 2018-07-16 09:59  我在地球凑人数的日子  阅读(84)  评论(0)    收藏  举报