1. 程式人生 > >django 內建分頁功能

django 內建分頁功能

匯入分頁的包

     

from django.core.paginator import Paginator

1.類方法

  • Page.has_next()  如果有下一頁,則返回True。
  • Page.has_previous() 如果有上一頁,返回 True。
  • Page.has_other_pages() 如果有上一頁或下一頁,返回True。
  • Page.next_page_number() 返回下一頁的頁碼。如果下一頁不存在,丟擲InvlidPage異常。
  • Page.previous_page_number() 返回上一頁的頁碼。如果上一頁不存在,丟擲InvalidPage異常。
  • Page.start_index() 返回當前頁上的第一個物件,相對於分頁列表的所有物件的序號,從1開始。比如,將五個物件的列表分為每頁兩個物件,第二頁的start_index()會返回3。
  • Page.end_index() 返回當前頁上的最後一個物件,相對於分頁列表的所有物件的序號,從1開始。 比如,將五個物件的列表分為每頁兩個物件,第二頁的end_index() 會返回 4。

2.類屬型

  • Page.object_list 當前頁上所有物件的列表。
  • Page.number 當前頁的序號,從1開始。
  • Page.paginator 相關的Paginator物件。

分頁例子:

from django.shortcuts import render,HttpResponse
from .models import User
from django.core.paginator import Paginator


def users(req):
    cur_page = req.GET.get("cur_page")
    res = User.objects.all()
    paginator = Paginator(res,10)#每頁顯示十個
    user_list = paginator.page(cur_page)#顯示當前頁的內容
    return render(req,"login.html",{"user_list":user_list})

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>人員名單</h2>
<ul>
    {% for item in user_list.object_list %}
        <li>{{ item.username }}</li>
    {% endfor %}
</ul>
<div>
        #上一頁按鈕
    {% if user_list.has_previous %}
        <a href="?cur_page={{ user_list.previous_page_number }}">上一頁</a>
    {% endif %}
        #頁碼顯示
    {% for item in user_list.paginator.page_range %}
        {% if item == user_list.number %}
            <a href="?cur_page={{ item }}" style="display: inline-block;color: red;background-color: mediumblue" >{{ item }}</a>
        {% else%}
            <a href="?cur_page={{ item }}">{{ item }}</a>
        {% endif %}
    {% endfor %}
        #下一頁按鈕
    {% if user_list.has_next %}
        <a href="?cur_page={{ user_list.next_page_number }}">下一頁</a>
    {% endif %}
</div>
</body>
</html>