Django分页的基本实现办法
生活随笔
收集整理的這篇文章主要介紹了
Django分页的基本实现办法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Django自帶一個分頁模塊Pagination,具體的參考官方文檔,我在這里簡單介紹一下具體的例子,模擬一個常用場景,列出部分的代碼出來。場景是這樣的:我們有一個blog表,其中有若干條記錄,我們要對這些記錄集進行分頁,每頁有10條記錄,把頁碼列舉出來,頁碼以a標簽的方式鏈接到本身頁碼的頁面(注意:不是采用Ajax的方式)。
第一步,取出blog表的全部記錄,定義每頁記錄數,定義當前頁 前邊頁碼范圍和后邊頁碼范圍。 views.py .... from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteger blogs=Blog.objects.all() page_size=10 after_range_num = 5 before_range_num = 6??? try: page = int(request.GET.get("page",1)) if page < 1: page = 1 except ValueError: page = 1 ? paginator = Paginator(blogs,page_size) try: blogs = paginator.page(page) except(EmptyPage,InvalidPage,PageNotAnInteger): blogs = paginator.page(1) if page >= after_range_num: page_range = paginator.page_range[page-after_range_num:page+before_range_num] else: page_range = paginator.page_range[0:int(page)+before_range_num] template_var["page_objects"]=blogs template_var["page_range"]=page_range ....
第二步,在template頁面上顯示一頁數據 index.html .... {% for b in page_objects.object_list%} <div class="node_article"> <h3><a href='{{b.get_absolute_url}}'>{{b.title}}</a></h3> <p>{{b.content|safe|escape}}</p> </div> {%endfor%} .... page_objects對象不能看做blog的記錄集,page_objects.object_list才是你想要的,然后循環輸出記錄,把該頁的數據集呈現出來。
第三部,頁碼呈現。 index.html .... <p class="page_container"> {% if page_objects.has_previous %} <a href="?page={{ page_objects.previous_page_number }}" title="Pre">上一頁</a> {% endif %} {% for p in page_range %} {% ifequal p page_objects.number %} <span style="font-size:16px;" title="當前頁"><b>{{p}}</b></span> ? ? ? ? {% else %}<a href="?page={{p}}" title="第{{p}}頁">{{p}}</a>{% endifequal %} {% endfor %} ? ?? {% if page_objects.has_next %} <a href="?page={{ page_objects.next_page_number }}" title="Next">下一頁</a> {% endif %} ? <b> {%if page_objects.paginator.num_pages%}共 {{ page_objects.paginator.num_pages }} 頁{%endif%} </b> </p> ....
總結
以上是生活随笔為你收集整理的Django分页的基本实现办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django-pagination---
- 下一篇: Django实战教程 分页列表