分頁函數

def get_paginator_data(paginator, current_page, around_count=3):
    """
    :param paginator: 分頁對象
    :param current_page: 當前頁數據
    :param around_count: 顯示的頁碼數
    :return: 當前頁碼、總頁數、左邊是否有更多頁標記、右邊是否有更多標記
    左邊頁碼範圍、右邊頁碼範圍
    """
    current_page_num = current_page.number  # 獲取當前頁面所在的頁碼
    total_page_num = paginator.num_pages  # 獲取總頁數

    left_has_more_page = False  # 默認左邊沒有更多頁
    right_has_more_page = False  # 默認右邊沒有更多頁

    # 算出當前頁面左邊的頁碼
    left_start_index = current_page_num - around_count
    left_end_index = current_page_num
    if current_page_num <= around_count * 2 + 1:
        left_page_range = range(1, left_end_index)
    else:
        left_has_more_page = True
        left_page_range = range(left_start_index, left_end_index)

    right_start_index = current_page_num + 1
    right_end_index = current_page_num + around_count + 1
    if current_page_num >= total_page_num - around_count * 2:
        right_page_range = range(right_start_index, total_page_num + 1)
    else:
        right_has_more_page = True
        right_page_range = range(right_start_index, right_end_index)

    return {
        "current_page_num": current_page_num,
        "total_page_num": total_page_num,
        "left_has_more_page": left_has_more_page,
        "right_has_more_page": right_has_more_page,
        "left_pages": left_page_range,
        "right_pages": right_page_range,
    }
相關文章
相關標籤/搜索