python---django中自帶分頁類使用


請先看在學習tornado時,寫的自定義分頁類:思路一致;

python---自定義分頁類

1.基礎使用:

后台數據獲取:

from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage#錯誤判斷
List_info
= [] for i in range(1000): List_info.append("news%d"%i) def get_page(req): current_page = req.GET.get('p') paginator = Paginator(List_info,10) #傳入總數據和每頁顯示的數據
  #含有屬性:
  #per_page:每頁顯示條數上面的10
  #count數據總數
  #num_pages:總頁數
  #page_range:總頁數索引范圍
  #page:page對象
try: posts = paginator.page(current_page)
     #page對象含有方法:
     #has_next:判斷是否有下一頁
     #has_previous:判斷是否有上一頁
     #next_page_number:下一頁頁碼
     #previous_page_number:上一頁頁碼
     #number:當前頁  注意:這個是屬性,其他是方法,需要加上()
     #paginator:paginator對象 except PageNotAnInteger: posts
= paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最后一頁 return render(req,'get_page.html',{'posts':posts})

前端代碼:

    <div class="content">
        {% for item in posts %}
            <p>{{ item }}</p>
        {% endfor %}
    </div>
    <div>
        <span>
            {% if posts.has_previous %}  #模板中調用函數不要()
                <a href="/page.html?p={{ posts.previous_page_number }}">prev</a>
            {% endif %}
            <span class="current">
                Page {{ posts.number }} of {{ posts.paginator.num_pages }}
            </span>
            {% if posts.has_next %}
                <a href="/page.html?p={{ posts.next_page_number }}">next</a>
            {% endif %}
        </span>
    </div>

2.擴展內置分頁:

類修改:

from django.core.paginator import Paginator

class CustomPagimator(Paginator):
    def __init__(self,current_page,max_page_num,*args,**kwargs):
        self.current_page = int(current_page)  #當前頁  #自定義變量
        self.max_page_num = max_page_num    #可以顯示多少頁  #自定義變量
        super(CustomPagimator,self).__init__(*args,**kwargs)

    def page_num_range(self):
        # self.num_pages 總頁數
        part_num = int(self.max_page_num/2)
        if self.num_pages <= self.max_page_num:  #先判斷總頁數和運行顯示的頁數大小
            return range(1, self.num_pages + 1)
        if self.current_page <= part_num:  #再取半分析
            return range(1,self.max_page_num+1)
        elif self.current_page+part_num>= self.num_pages:
            return range(self.num_pages-self.max_page_num,self.num_pages+1)
        else:
            return range(self.current_page - part_num, self.current_page + part_num + 1)

類調用:

List_info = []
for i in range(1000):
    List_info.append("news%d"%i)

from 模塊.自定義分頁類文件 import 自定義分頁類CustomPagimator
def get_page(req): current_page
= req.GET.get('p') paginator = CustomPagimator(current_page=current_page, max_page_num=5,object_list=List_info,per_page=10) #傳入總數據和每頁顯示的數據 try: posts = paginator.page(current_page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最后一頁 page_html = paginator.page_num_range() return render(req,'get_page.html',{'posts':posts,"page_html":page_html})

前端使用:

    <div>
        <span>
            {% if posts.has_previous %}
                <a href="/page.html?p={{ posts.previous_page_number }}">prev</a>
            {% endif %}
            <span class="page">
                {% for i in page_html %}
                    <a href="/page.html?p={{ i }}">{{ i }}</a>
                {% endfor %}
            </span>
            <span class="current">
                Page {{ posts.number }} of {{ posts.paginator.num_pages }}
            </span>
            {% if posts.has_next %}
                <a href="/page.html?p={{ posts.next_page_number }}">next</a>
            {% endif %}
        </span>
    </div>

 


免責聲明!

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



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