日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Django實現(xiàn)基于類的分頁功能

時間:2022-01-28 23:28:46 類型:python
字號:    

本文基于類實現(xiàn)分頁功能,以下是詳細代碼:

class Page:
    page_num = 0
    total_count = 0
    tartype = ""  # 查詢路徑,默認為當前頁
    total_page = 0  # 總頁數(shù)
    per_page = 8  # 每頁顯示8篇文章
    max_page = 11  # 每頁最大展示頁數(shù)選項
    half_page = max_page // 2
    searchParam = ""

    # 標記該鏈接所屬分類ID,首頁默認為空

    def __init__(self, page_num=1, total_count=0, per_page=8, max_page=11, tartype="", searchParam=""):
        """
        初始化函數(shù):接收頁碼數(shù)、總數(shù)據(jù)數(shù),計算總頁碼數(shù)并過濾錯誤頁碼數(shù)據(jù)
        :param page_num: 當前頁碼數(shù)
        :param total_count: 總數(shù)據(jù)數(shù)
        :param tartype: 分類值
        :param searchParam: 查詢信息
        """

        self.page_num = page_num
        self.total_count = total_count
        self.tartype = tartype
        self.per_page = per_page
        self.max_page = 11
        self.total_page, m = divmod(self.total_count, self.per_page)  # 總頁碼數(shù),余數(shù)為m
        if searchParam:
            self.searchParam = searchParam
        if m:
            self.total_page += 1  # 余數(shù) 0 , 加1
        if self.total_page < self.max_page:
            self.max_page = self.total_page
            self.half_page = self.max_page // 2
        # 過濾錯誤get數(shù)據(jù)
        if self.page_num > self.total_page:
            self.page_num = self.total_page
        elif self.page_num < 1:
            self.page_num = 1

    def data_start(self):
        return (self.page_num - 1) * self.per_page

    def data_end(self):
        return self.page_num * self.per_page

    def page_html(self):
        # 計算頁數(shù)選項
        page_start = self.page_num - self.half_page
        page_end = self.page_num + self.half_page
        if page_start <= 1:
            page_start = 1
            page_end = self.max_page
        if page_end >= self.total_page:
            page_end = self.total_page
            page_start = self.total_page - self.max_page + 1
        # 計算上一頁下一頁選項
        if self.page_num == 1:
            last_page = self.page_num
            next_page = self.page_num + 1
        else:
            if self.page_num == self.total_page:
                last_page = self.page_num - 1
                next_page = self.page_num
            else:
                last_page = self.page_num - 1
                next_page = self.page_num + 1
        print(self.searchParam)
        html_str_list = []
        html_str_list.append('<li><a href="{}?page={}{}" >?</a></li>'.format(self.tartype, last_page, self.searchParam))
        for i in range(page_start, page_end + 1):
            if i == self.page_num:
                tmp = '<li><a class="active" href="{}?page={}{}" >{}</a></li>'.format(self.tartype, i, self.searchParam,
                                                                                      i)
                html_str_list.append(tmp)
                continue
            tmp = '<li><a href="{}?page={}{}" >{}</a></li>'.format(self.tartype, i, self.searchParam, i)
            html_str_list.append(tmp)
        html_str_list.append(
                '<li><a href="{}?page={}{}" >?</a></li>'.format(self.tartype, next_page, self.searchParam))
        page_html = "".join(html_str_list)
        return page_html

通過修改per_page、max_page控制每頁展示的文章數(shù)和分頁模塊展示的最大頁碼數(shù)。

實現(xiàn)思路:創(chuàng)建page類對象,傳入參數(shù)為page_num(當前頁碼數(shù))、total_count(總文章數(shù))、tartype(分類值)、category(所屬分類ID)【注:tartpe用于區(qū)分index頁還是category頁,category為查詢的分類ID,index頁時值為空??梢愿鶕?jù)自己要實現(xiàn)的功能進行修改】構造函數(shù)會計算出總頁碼數(shù)并過濾掉錯誤數(shù)據(jù)。需要實現(xiàn)某功能是直接調用類方法即可。

類方法:data_start()計算出當前頁的文章的起始索引值
data_end()計算出當前頁的文章的結束索引值
page_html()返回分頁模塊的html代碼,可直接render到前端。

調用方法:

pages_str = Page(page_num = currentPage, total_count= total,per_page= pageSize,searchParam=search_parm).page_html()

44.jpg

<