django分頁功能詳解

python shell模式下導(dǎo)入django下的Paginator模塊

In [1]: from django.core.paginator import Paginator  

python shell模式下導(dǎo)入需要展示的頁面類

In [2]: from students.models import Student 

python shell模式下拿到數(shù)據(jù)并進(jìn)行展示

#拿到數(shù)據(jù)以倒敘進(jìn)行展示,每頁展示3條
In [3]: p = Paginator(Student.objects.all().order_by('c_time'),3)  

在python shell模式下模式下查看

In [4]: p.count   #查看總數(shù)
Out[5]: 9

In [6]: p.num_pages  #查看總數(shù)據(jù)可以分為幾頁
Out[7]: 3

In [8]: p.page_range   #范圍                                                                                                                                                                                                                
Out[9]: range(1, 4)

In [10]: pag1.object_list       #查看第一頁數(shù)據(jù)                                                                                                                                                                                                   
Out[11]: <QuerySet [<Student: Aaron-23>, <Student: Bleak-23>, <Student: Rose-29>]>

In [15]: pag1.has_previous()    #驗(yàn)證第一頁是否有上一頁                                                                                                                                                                                                        
Out[15]: False

In [16]: pag1.has_next()      #驗(yàn)證第一頁是否有下一頁                                                                                                                                                                                                      
Out[16]: True

編寫視圖

def student_list(request):
    #分頁
    #數(shù)據(jù)總量
    total_num = sts.count()
    #每頁的數(shù)據(jù)條數(shù)
    per_page = request.GET.get('per_page',10) #10為默認(rèn)值,每頁數(shù)據(jù)條數(shù)
    #當(dāng)前頁碼
    page = request.GET.get('page',1)

    paginator = Paginator(sts,per_page)#每頁顯示的人數(shù)
    sts = paginator.get_page(page)  #顯示是哪一頁
    total_page = paginator.num_pages   #總頁面

    return render(request,'students/student_list.html',context={
        "per_page" : per_page,
        "total_page" : total_page,
        "page" : page,
    })

編寫頁面

 <div class="btn-group">
        <nav aria-label="Page navigation">
            {% pagination_html %}
        </nav>
         </div>
    <!-- Single button -->
        <div class="btn-group" style="margin-top: -5px">
          <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            {{ per_page }}條/頁 <span class="caret"></span>
          </button>
          <ul class="dropdown-menu">
            <li><a href="{{ request.path }}?per_page=3">3條/頁</a></li>
            <li><a href="{{ request.path }}?per_page=5#">5條/頁</a></li>
            <li><a href="{{ request.path }}?per_page=10">10條/頁</a></li>
          </ul>
        </div>

注冊

from django import template
register = template.Library()

@register.inclusion_tag('students/pagination.html',takes_context=True)
def pagination_html(context):
    total_page = context['total_page']#總頁碼數(shù)
    page = int(context['page'])  #當(dāng)前頁
    num = 1  #左右各顯示幾頁
    page_list = []
    """
    第一部分:當(dāng)前頁+左邊頁碼范圍
        1瞭吃、當(dāng)前頁左邊不夠顯示,范圍就是1-當(dāng)前頁
        2、當(dāng)前頁左邊可以顯示癣籽,范圍就是page-num到當(dāng)前頁
    第二部分:右邊頁碼范圍
        1磨取、當(dāng)前頁右邊不夠顯示,范圍就是當(dāng)前頁+1-->total_page
        2情萤、當(dāng)前頁右邊可以顯示,范圍就是當(dāng)前頁+1-->page+num
    """
    #第一部分:
    if page - num <= 0:
        for i in range(1,page+1):
            page_list.append(i)
    else:
        for i in range(page-num,page+1):
            page_list.append(i)
    #第二部分:
    if page + num >= total_page:
        for i in range(page+1,total_page+1):
            page_list.append(i)
    else:
        for i in range(page+1,page+num+1):
            page_list.append(i)

    return {"page_list" : page_list,
            "page" : page,
            "per_page" : context['per_page'],
            "total_page" : total_page,
            }

自定義模板

<ul class="pagination">
    <li {% if page == 1 %}class="disabled" {% endif %}>
      <a href="{% if page > 1 %}{{ request.path }}?page={{ page|add:'-1' }}&per_page={{ per_page }}{% endif %}" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
    {% for page_num in page_list %}
         <li {%if page_num == page %}class="active" {% endif %}><a href="{{ request.path }}?page={{ page_num }}&per_page={{ per_page }}">{{ page_num }}</a></li>
    {% endfor %}
    <li {% if page == total_page %}class="disabled" {% endif %}>
      <a href="{% if page < total_page %}{{ request.path }}?page={{ page|add:'1' }}&per_page={{ per_page }}{% endif %}" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
</ul>

效果展示

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末积瞒,一起剝皮案震驚了整個(gè)濱河市叉弦,隨后出現(xiàn)的幾起案子丐一,更是在濱河造成了極大的恐慌,老刑警劉巖淹冰,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库车,死亡現(xiàn)場離奇詭異,居然都是意外死亡樱拴,警方通過查閱死者的電腦和手機(jī)柠衍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晶乔,“玉大人珍坊,你說我怎么就攤上這事”窆” “怎么了垫蛆?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腺怯。 經(jīng)常有香客問我袱饭,道長,這世上最難降的妖魔是什么呛占? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任虑乖,我火速辦了婚禮,結(jié)果婚禮上晾虑,老公的妹妹穿的比我還像新娘疹味。我一直安慰自己仅叫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布糙捺。 她就那樣靜靜地躺著诫咱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洪灯。 梳的紋絲不亂的頭發(fā)上坎缭,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音签钩,去河邊找鬼掏呼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铅檩,可吹牛的內(nèi)容都是我干的憎夷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昧旨,長吁一口氣:“原來是場噩夢啊……” “哼拾给!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起臼予,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鸣戴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后粘拾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窄锅,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年缰雇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了入偷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡械哟,死狀恐怖疏之,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情暇咆,我是刑警寧澤锋爪,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站爸业,受9級特大地震影響其骄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扯旷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一拯爽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钧忽,春花似錦毯炮、人聲如沸逼肯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮幢。三九已至,卻和暖如春为迈,著一層夾襖步出監(jiān)牢的瞬間洲拇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工曲尸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人男翰。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓另患,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛾绎。 傳聞我的和親對象是個(gè)殘疾皇子昆箕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353