当前位置: 首页 > 工具软件 > Paginator > 使用案例 >

笔记11-Django数据分页- Paginator 与 Page 类

斜宁
2023-12-01

对于Django提供的数据分页的技术,Paginator类用于对列进行一页n条数据的分页运算,也就是分多少页,Page类用于表示第m页的数据,也就是一页显示多少数据
Paginator类常用对象属性

num_pages返回分页后总页数
page_range返回分页后页码的列表,返回值类型为列表
count返回对象总数
init(data,number)返回分页对象,data为列表数据,number为每页数据的条数
page(number)返回第number页的Page类实例对象

对于Page类,可通过调用Paginator对象的page()方法来返回Page对象

number返回当前是第几页,从1开始
object_list返回当前页对象的列表
paginator当前页对应的Paginator
previous_page_number返回前一页的页码
next_page_number返回下一页的页码
has_next如果有下一页则返回True
has_previous如果有上一页则返回True
len()返回当前页面对象的个数

视图函数:
先获取数据库图书表的所有满足过滤器条件的数据内容,在通过Page类和Paginator类的属性方法获得页数和每一页的数据,在渲染到页面上

def show_books(request,pageIdx):
    # 查询出所有满足条件的数据
    bookslist= BookInfo.objects.filter(is_delete=0)
    # print(bookslist)
    # 整理当前页码
    paginator = Paginator(bookslist,3)
    if pageIdx == "":
        pageIdx = 1
    pageIdx=int(pageIdx)
    # print(pageIdx)
    # 通过对象获得图书信息
    pageObj=paginator.page(pageIdx)
    # 页码列表
    codelist=paginator.page_range
    return render(request,"book/show_books.html",
                  {"pageIdx":pageIdx,
                   "pageObj":pageObj,
                   "codelist":codelist,
                   "total":paginator.count,
                   "totalPage":paginator.num_pages
                   })

配置路由: d*返回当前页数

url(r'^show_books/(\d*)', show_books),

html页面:

<table border="1" width="400px" >
    <tr>
        <th>编号</th>
        <th>书名</th>
        <th>总数页</th>
    </tr>
    {% for book in pageObj.object_list %}
    <tr align="center">
        <td>{{book.id}}</td>
        <td>{{book.bname}}</td>
        <td>{{book.bpage}}</td>
    </tr>
    {% endfor %}
    <tr align="center">
        <td colspan="3">
            共{{total}}条数据
            {% if pageObj.has_previous %}
                <a href="/book/show_books/{{pageObj.previous_page_number}}">上一页</a>
            {% else %}
                <span>上一页</span>
            {% endif %}
            {% for code in codelist %}
                {% if pageIdx == code %}
                    <span>{{ code }}</span>
                {% else %}
                    <a href="/book/show_books/{{ code }}">{{ code }}</a>
                {% endif %}
            {% endfor %}
            {% if pageObj.has_next %}
                <a href="/book/show_books/{{pageObj.next_page_number}}">下一页</a>
            {% else %}
                <span>下一页</span>
            {% endif %}
            共{{totalPage}}页
        </td>
    </tr>
</table>
 类似资料: