Django實(shí)現(xiàn)分頁(yè)功能
Django提供了一個(gè)新的類來(lái)幫助你管理分頁(yè)數(shù)據(jù),這個(gè)類存放在django/core/paginator.py
.它可以接收列表、元組或其它可迭代的對(duì)象。
class Paginator(object): def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True): self.object_list = object_list self.per_page = int(per_page) self.orphans = int(orphans) self.allow_empty_first_page = allow_empty_first_page ……
基本語(yǔ)法實(shí)例
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import os from django.core.paginator import Paginator objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br> p = Paginator(objects,3) # 3條數(shù)據(jù)為一頁(yè),實(shí)例化分頁(yè)對(duì)象 print p.count # 10 對(duì)象總共10個(gè)元素 print p.num_pages # 4 對(duì)象可分4頁(yè) print p.page_range # xrange(1, 5) 對(duì)象頁(yè)的可迭代范圍 page1 = p.page(1) # 取對(duì)象的第一分頁(yè)對(duì)象 print page1.object_list # 第一分頁(yè)對(duì)象的元素列表['john', 'paul', 'george'] print page1.number # 第一分頁(yè)對(duì)象的當(dāng)前頁(yè)值 1 page2 = p.page(2) # 取對(duì)象的第二分頁(yè)對(duì)象 print page2.object_list # 第二分頁(yè)對(duì)象的元素列表 ['ringo', 'lucy', 'meiry'] print page2.number # 第二分頁(yè)對(duì)象的當(dāng)前頁(yè)碼值 2 print page1.has_previous() # 第一分頁(yè)對(duì)象是否有前一頁(yè) False print page1.has_other_pages() # 第一分頁(yè)對(duì)象是否有其它頁(yè) True print page2.has_previous() # 第二分頁(yè)對(duì)象是否有前一頁(yè) True print page2.has_next() # 第二分頁(yè)對(duì)象是否有下一頁(yè) True print page2.next_page_number() # 第二分頁(yè)對(duì)象下一頁(yè)碼的值 3 print page2.previous_page_number() # 第二分頁(yè)對(duì)象的上一頁(yè)碼值 1 print page2.start_index() # 第二分頁(yè)對(duì)象的元素開始索引 4 print page2.end_index() # 第2分頁(yè)對(duì)象的元素結(jié)束索引 6
官方解釋在視圖中的應(yīng)用
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import render def listing(request): contact_list = Contacts.objects.all() paginator = Paginator(contact_list, 25) # Show 25 contacts per page page = request.GET.get('page') try: contacts = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. contacts = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. contacts = paginator.page(paginator.num_pages) return render(request, 'list.html', {'contacts': contacts})
在template的html模板中的應(yīng)用
{% for contact in contacts %} {# Each "contact" is a Contact model object. #} {{ contact.full_name|upper }}<br /> ... {% endfor %} <div class="pagination"> <span class="step-links"> {% if contacts.has_previous %} <a href="?page={{ contacts.previous_page_number }}">previous</a> {% endif %} <span class="current"> Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}. </span> {% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">next</a> {% endif %} </span> </div>
舉例講述分頁(yè)功能的使用目的說(shuō)明
現(xiàn)要實(shí)現(xiàn)如下功能
1、網(wǎng)頁(yè)上顯示分頁(yè)數(shù)據(jù),3條數(shù)據(jù)為一頁(yè)
2、有分頁(yè)導(dǎo)航功能,被選中頁(yè)高亮顯示
3、如果沒有上一頁(yè)或下一頁(yè),則不出現(xiàn)箭頭導(dǎo)航
4、如果最后一頁(yè)的數(shù)據(jù)少于2條,合并到上一頁(yè)
效果圖
圖1:
圖2:
視圖定義
定義templates
分頁(yè)功能優(yōu)化
目標(biāo):
1、在template中的html模板中使用自定義函數(shù)
2、不管有多少分頁(yè),頁(yè)面上最多顯示5頁(yè)
基礎(chǔ)知識(shí)
Django的模板語(yǔ)言包含了各種各樣的內(nèi)置標(biāo)簽和過(guò)濾器來(lái)滿足你的應(yīng)用需求,不過(guò)有時(shí)候你也會(huì)發(fā)現(xiàn)你的需要的功能不在內(nèi)置的功能中,這時(shí)候你可以通過(guò)Python語(yǔ)言自定義標(biāo)簽和過(guò)濾器來(lái)擴(kuò)展模板引擎,然后在你的模板中使用{% load %}來(lái)加載使用它們。
在你的app下創(chuàng)建templatetags包,在其下創(chuàng)建python腳本來(lái)定義你的標(biāo)簽和過(guò)濾器,如:
polls/ __init__.py models.py templatetags/ __init__.py poll_extras.py views.py
然后在你的模板中使用
{% load poll_extras %}
項(xiàng)目實(shí)戰(zhàn)
自定義過(guò)濾器和標(biāo)簽
在模板中引用
效果圖:
https://github.com/kongzhagen/python/tree/master/Django
- django實(shí)現(xiàn)分頁(yè)的方法
- Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁(yè)功能的例子
- Django分頁(yè)查詢并返回jsons數(shù)據(jù)(中文亂碼解決方法)
- Django實(shí)現(xiàn)快速分頁(yè)的方法實(shí)例
- Django自定義分頁(yè)與bootstrap分頁(yè)結(jié)合
- Django原生sql也能使用Paginator分頁(yè)的示例代碼
- Django實(shí)現(xiàn)網(wǎng)頁(yè)分頁(yè)功能
- Django實(shí)現(xiàn)簡(jiǎn)單分頁(yè)功能的方法詳解
- Django框架實(shí)現(xiàn)分頁(yè)顯示內(nèi)容的方法詳解
- Django實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能
相關(guān)文章
Python實(shí)現(xiàn)排序算法、查找算法和圖遍歷算法實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)排序算法、查找算法和圖遍歷算法實(shí)例,排序算法、查找算法和圖遍歷算法是計(jì)算機(jī)科學(xué)中常見且重要的算法。它們?cè)跀?shù)據(jù)處理、搜索和圖結(jié)構(gòu)等領(lǐng)域發(fā)揮著關(guān)鍵作用,需要的朋友可以參考下2023-08-08詳解Python中圖像邊緣檢測(cè)算法的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了python中圖像邊緣檢測(cè)算法的原理及實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05詳解Python map函數(shù)及Python map()函數(shù)的用法
map() 會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。下面通過(guò)本文給大家介紹Python map函數(shù)及Python map()函數(shù)的用法,需要的朋友參考下吧2017-11-11簡(jiǎn)單介紹Python中的len()函數(shù)的使用
這篇文章主要簡(jiǎn)單介紹了Python中的len()函數(shù)的使用,包括在四種情況下的使用小例子,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-04-04