Django 中的分页 (Pagination) 是如何实现的?

推荐答案

在 Django 中,分页功能可以通过 django.core.paginator 模块中的 Paginator 类来实现。以下是一个简单的示例:

-- -------------------- ---- -------
---- --------------------- ------ ---------
---- ---------------- ------ ------
---- ------------ ------ -------

--- -----------------
    - ------
    ----------- - ---------------------
    
    - ---- -- ---
    --------- - ---------------------- ---
    
    - ------
    ----------- - -----------------------
    
    - --------
    -------- - -------------------------------
    
    ------ --------------- ------------------- ------------ ----------

在模板中,可以使用 page_obj 来显示分页内容:

-- -------------------- ---- -------
-- --- --- -- -------- --
    -- --- --
-- ------ --

---- -------------------
    ----- -------------------
        -- -- --------------------- --
            -- ---------------------- ---------
            -- -------------- ----------------------------- ----------------
        -- ----- --

        ----- ----------------
            ---- -- --------------- -- -- -- ---------------------------- ---
        -------

        -- -- ----------------- --
            -- -------------- ------------------------- ------------
            -- -------------- ---------------------------- -------- -----------
        -- ----- --
    -------
------

本题详细解读

Paginator 类

Paginator 类是 Django 分页功能的核心。它接受一个对象列表和一个每页显示的对象数量作为参数。Paginator 类的主要方法包括:

  • get_page(page_number):返回指定页码的 Page 对象。如果页码无效,则返回第一页或最后一页。
  • page_range:返回一个包含所有页码的迭代器。
  • count:返回对象的总数。
  • num_pages:返回总页数。

Page 类

Page 类表示分页后的某一页。它包含以下常用属性和方法:

  • object_list:当前页的对象列表。
  • number:当前页码。
  • has_next():判断是否有下一页。
  • has_previous():判断是否有上一页。
  • next_page_number():返回下一页的页码。
  • previous_page_number():返回上一页的页码。

模板中的分页导航

在模板中,可以通过 page_obj 对象来生成分页导航。常见的分页导航包括:

  • 上一页和下一页链接。
  • 第一页和最后一页链接。
  • 当前页码和总页数显示。

通过结合 PaginatorPage 类,可以轻松地在 Django 中实现分页功能,并在模板中展示分页导航。

纠错
反馈