分頁
django中實現管理數據分頁的類位於 django.core.paginator.py中
Paginator類
對列表數據進行分頁處理
對象
Paginator(Post.objects.all(),3)
Paginator(列表,int) 返回分頁對象,專門處理分頁(list集合,每頁的數量)
屬性
count num_pages page_range
paginator.count 所有頁面的對象總數
paginator.num_pages 頁面總數
paginator.page_range 頁碼列表
方法
page(num):下標以1開始的下標對象,如果提供的頁碼不存在,拋出InvalidPage異常
異常exception
InvalidPage:當向page()傳入一個無效的頁碼時拋出
PageNotAnInteger:當向page()傳入一個不是整數的值時拋出
EmptyPage:當向page()提供一個有效值,但是那個頁面上沒有任何對象時拋出
Page對象
Paginator 對象的page() 方法返回Page對象
page = pageinator(1) 返回指定頁
屬性
page . object_list 獲得當前頁所有的數據+=對象的列表
Page . number 當前頁的序號,從1 開始
Page. paginator 當前頁page相關的Paginator對象
方法
has_next():如果有下一頁返回True
has_previous():如果有上一頁返回True
has_other_pages():如果有上一頁或下一頁返回True
next_page_number():返回下一頁的頁碼,如果下一頁不存在,拋出InvalidPage異常
previous_page_number():返回上一頁的頁碼,如果上一頁不存在,拋出InvalidPage異常
Page.start_index()[source]返回當前頁上的第一個對象,相對於分頁列表的所有對象的序號,從1開始。 比如,將五個對象的列表分為每頁兩個對象,第二頁的start_index()會返回3。
Page.end_index()[source]返回當前頁上的最后一個對象,相對於分頁列表的所有對象的序號,從1開始。 比如,將五個對象的列表分為每頁兩個對象,第二頁的end_index() 會返回 4。
len():返回當前頁面對象的個數
迭代頁面對象:訪問當前頁面中的每個對象
案例
method 最多顯示5 頁
@staticmethod def get_posts_by_page(num,per_page=1): num = int(num) pagintor = Paginator(Post.objects.order_by('-modified').all(),per_page) if num <1: num =1 if num > pagintor.num_pages: num =pagintor.num_pages page = pagintor.page(num) # 最多顯示5頁 # range =[ ) pervious= 2 last = 2 #如果當前頁為 1 或2 時范圍 if num <=pervious: start = 1 end = pervious+last+1 # 如果當前頁大於2 范圍 #例如當前頁 為 8 時 start=6 end = 10 if num > pervious: start = num- pervious end = num+last #當最后一樣超過總頁數時 # 例如當前頁 為 8 時 start=6 end = 10 但是 只有9頁 if end > pagintor.num_pages: min = end - pagintor.num_pages end = pagintor.num_pages start -= min return (page,range(start,end+1))
頁面渲染
def index_view(request,num = '1'): page,page_range=Post.get_posts_by_page(num) return render(request,'index.html',context={'page':page,'page_range':page_range})
html中頁面顯示
{% if page.has_previous %}
<a class="extend prev" rel="next" href="/page/{{ page.previous_page_number }}">« Prev</a>
{% endif %}
{% for p in page_range %}
{% if p == page.number %}
<span class="page-number current">{{ p }}</span>
{% else %}
<a class="page-number" href="/page/{{ p }}">{{ p }}</a>
{% endif %}
{% endfor %}
{% if page.has_next %}
<a class="extend next" rel="next" href="/page/{{ page.next_page_number }}">Next »</a>
{% endif %}
