zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/lhqlhq/p/9178891.html
Copyright © 2011-2022 走看看