1. 程式人生 > >Django內置分頁擴展

Django內置分頁擴展

tom size pos sel oot oct iou HA object

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>

Django內置分頁擴展