Django分頁解析


分頁

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 %}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM