• Django内置分页扩展


    url文件

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index1.html/', views.index1),
    ]

    views文件

    from django.shortcuts import render
    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    
    # Create your views here.
    
    USER_LIST = []
    for i in range(1,999):
        temp = {"name":"root"+str(i),"age":i}
        USER_LIST.append(temp)
    
    
    def index(request):
        per_page_count = 10
        current_page=request.GET.get('p')
        current_page=int(current_page)
    
        start = (current_page - 1)*per_page_count
        end =current_page*per_page_count
        data = USER_LIST[start:end]
    
        if current_page<=1:
            prve_pag = 1
        prve_pag = current_page -1
        next_pag = current_page +1
        return render(request,'index.html',{"users":data,"prve_page":prve_pag,"next_page":next_pag})
    
    
    class CustomPaginator(Paginator):
        def __init__(self,current_page,per_page_num,*args,**kwargs):
            super(CustomPaginator,self).__init__(*args,**kwargs)
            #当前页
            self.current_page = int(current_page)
            #最多显示数量
            self.per_page_num = int(per_page_num)
    
        def per_num_range(self):
            #如果总页数小于最多显示数量
            if self.num_pages<self.per_page_num:
                return range(1,self.num_pages+1)
            part=int(self.per_page_num/2)
    
            #当前页小于part(页码从领开始)
            if self.current_page <part:
                return range(1,self.per_page_num+1)
            #当前页+part大于总页数(页码最后一位已经显示出来了)
            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)
    
    def index1(request):
    
        # 全部数据:USER_LIST,=》得出共有多少条数据
        # per_page: 每页显示条目数量
        # count:    数据总个数
        # num_pages:总页数
        # page_range:总页数的索引范围,如: (1,10),(1,200)
        # page:     page对象(是否具有下一页;是否有上一页;)
        current_page=request.GET.get('p')
        paginator = CustomPaginator(current_page,7,USER_LIST,10)
    
        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,"index1.html",{"posts":posts})

    html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <ul>
        {% for row in posts.object_list %}
            <li>{{ row.name }}--{{ row.age }}</li>
        {% endfor %}
    </ul>
        {% include 'include/pager.html' %}
    </body>
    </html>

     将分页代码放在include,这样分页功能就可以重用了

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
        {% if posts.has_previous %}
            <a href="/index1.html?p={{ posts.previous_page_number }}">上一页</a>
        {% endif %}
    
    
        {% for i in posts.paginator.per_num_range %}
            {% if i == posts.number  %}
                <a style="font-size: 30px;" href="/index1.html?p={{ i }}">{{ i }}</a>
            {% else %}
                <a href="/index1.html?p={{ i }}">{{ i }}</a>
            {% endif %}
        {% endfor %}
    
    
    
        {% if posts.has_next%}
            <a href="/index1.html?p={{ posts.next_page_number }}">下一页</a>
        {% endif %}
    
        <span>{{ posts.number }}/{{ posts.paginator.num_pages}}</span>
    
    
    </body>
    </html>
  • 相关阅读:
    linux超级终端minicom的使用方法
    linux常用命令
    chmod 777 修改权限
    linux mount挂载设备(u盘,光盘,iso等 )使用说明
    logcat的调试 比较有用的几个命令
    git分支
    Debug和Release区别
    【Linux】linux常用基本命令
    Git代码仓库的建立流程
    Linux记录-JMX监控Tomcat上传到falcon
  • 原文地址:https://www.cnblogs.com/lhqlhq/p/9178891.html
Copyright © 2020-2023  润新知