Django Paginator自带分页

前端之家收集整理的这篇文章主要介绍了Django Paginator自带分页前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

对象分为Paginator和Page

Paginator方法:

per_page         每页显示数量

count           数据总个数

num_pages        总页数

page_range        总页数的索引范围

page            page对象

Page方法:

has_next             是否有下一页

next_page_number      下一页页面

has_prevIoUs          是否有上一页

prevIoUs_page_number     上一页页面

objcet_list         分页之后的数据列表

number              当前页

paginator            paginator对象

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
L = []for i in range(999):
    L.append(i)
def index(request):
    current_page = request.GET.get('p')
    paginator = CustomPaginator(current_page, 11, L, 10)    
    # per_page: 每页显示条目数量
    # count:    数据总个数
    # num_pages:总页数
    # page_range:总页数的索引范围,如: (1,10),(1,200)
    # page:     page对象
    try:
        posts = paginator.page(current_page)        
        # has_next              是否有下一页
        # next_page_number      下一页页码
        # has_prevIoUs          是否有上一页
        # prevIoUs_page_number  上一页页码
        # object_list           分页之后的数据列表
        # number                当前页
        # paginator             paginator对象
    except PageNotAnInteger:
        posts = paginator.page(1)    except EmptyPage:
        posts = paginator.page(paginator.num_pages)    
    return render(request, 'index.html', {'posts': posts})

Django自带分页添加显示指定页数功能:

NewPaginator函数:

class NewPaginator(Paginator):
    def __init__(self, current_page, per_pager_num, *args, **kwargs):
        # 当前页
        self.current_page = int(current_page)
        # 最多显示页面数量
        self.per_pager_num = int(per_pager_num)
        super(NewPaginator, self).__init__(*args, **kwargs)
    def pager_num_range(self):
        # 如果总页数小于显示页面数量
        if self.num_pages < self.per_pager_num:
            return range(1, self.num_pages + 1)
        # 如过总页数大于显示页数
        part = self.per_pager_num // 2
        if self.current_page <= part:
            return range(1, self.per_pager_num + 1)
        # 如果显示页面==总页数
        if (self.current_page + part) > self.num_pages:
            return range(self.num_pages - self.per_pager_num+1, self.num_pages + 1)
        return range(self.current_page - part, self.current_page + part + 1)
        
L = []
for i in range(999):
    L.append(i)
def index(request):
    current_page = request.GET.get('p')
    paginator = NewPaginator(current_page, 10)    # per_page: 每页显示条目数量
    try:
        posts = paginator.page(current_page)        
    except PageNotAnInteger:
        posts = paginator.page(1)    except EmptyPage:
        posts = paginator.page(paginator.num_pages)    
    return render(request, {'posts': posts})

html页面

<!DOCTYPE html>
<html>
<head>
    <Meta charset="UTF-8">
    <title></title>
</head>
<body>
<ul>
    {% for item in posts %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>
<div>
<span>
{% if posts.has_prevIoUs %}
    <a href="?p={{ posts.prevIoUs_page_number }}">PrevIoUs</a>
{% endif %}
    {% for i in posts.paginator.page_num_range %}
        <a href="?p={{ i }}">{{ i }}</a>
    {% endfor %}
    {% if posts.has_next %}
        <a href="?p={{ posts.next_page_number }}">Next</a>
    {% endif %}
</span>
<span>
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
</div>
</body>
</html>


猜你在找的Django相关文章