成都创新互联网站制作重庆分公司

Django-自定义分页-创新互联

封装好的自定义分页器

class Page():

    def __init__(self, page_num, total_count, base_url, params, per_page=10, max_page=11):

        """
        page_num: 当前页码数
        total_count: 数据总数
        base_url: a标签href的前缀
        params: request对象,是QueryDict类型
        per_page: 每页显示多少条数据
        max_page: 单一页面上最多显示几个页码
        """

        self.page_num = page_num
        self.total_count = total_count
        self.base_url = base_url
        self.params = params
        self.per_page = per_page
        self.max_page = max_page

        # 总页码
        total_page, m = divmod(self.total_count, self.per_page)

        if m:
            total_page += 1
        self.total_page = total_page

        try:
            self.page_num = int(self.page_num)
            # print("self.page_num==>", self.page_num) 1
            # 如果输入的页码数大于大的页码数,默认返回第一页
            if self.page_num > self.total_page:
                self.page_num = self.total_page
            elif self.page_num <= 0:
                self.page_num = 1
        except Exception as e:
            # 当输入的页码不是数字时,返回第一页
            self.page_num = 1
        #如果当前页码数为0,那么数据开始位置也是0
        if self.page_num == 0:
            self.data_start = self.page_num
        # 定义两个变量保存数据从哪取到哪
        else:
            self.data_start = (self.page_num - 1) * 10

        self.data_end = self.page_num * 10

        #页面上总共展示多少页码
        #如果总页数小于设定的单页显示页码数
        if self.total_page < self.max_page:
            self.max_page = self.total_page
        # 让选定页码取中,计算左右两边长度
        self.half_max_page = self.max_page // 2

        # 页面上展示的页码从哪开始
        self.page_start = self.page_num - self.half_max_page
        # 页面上展示的页码从哪结束
        self.page_end = self.page_num + self.half_max_page
        # 如果开始页数小于1
        if self.page_start <= 1:
            self.page_start = 1
            self.page_end = self.max_page
        # 如果结束页面大于大页码数
        elif self.page_end >= self.total_page:
            self.page_start = self.total_page - self.max_page + 1
            self.page_end = self.total_page

        #拷贝一份request对象,是个QueryDict形式,后面会用于获取及修改url
        import copy
        self.params = copy.deepcopy(self.params) #{"page":"12","title_startwith":"py","id_gt":"5"}

    @property
    def start(self):
        return self.data_start

    @property
    def end(self):
        return self.data_end

    def page_html(self):

        # 自己拼接分页的HTML代码
        html_str_list = []
        print("html_str_list==>", html_str_list)
        # 加上上一页标签
        #判断一下如果是第一页就没有上一页了
        if self.page_num <= 1:
            html_str_list.append('
  • ') #否则加上上一页 else: self.params["page"] = self.page_num - 1 html_str_list.append('
  • '.format(self.base_url ,self.params.urlencode())) # 加上首页 self.params["page"] = 1 html_str_list.append('
  • 首页
  • '.format(self.base_url, self.params.urlencode())) for i in range(self.page_start, self.page_end + 1): #把QueryDict中的page修改为当前循环的页码 self.params["page"] = i # 如果i等于当前页就加一个样式类 if i == self.page_num: tmp = '
  • {2}
  • '.format(self.base_url, self.params.urlencode(), i) else: tmp = '
  • {2}
  • '.format(self.base_url, self.params.urlencode(), i) html_str_list.append(tmp) # 加上尾页 self.params["page"] = self.total_page html_str_list.append('
  • 尾页
  • '.format(self.base_url, self.params.urlencode())) # 加上下一页标签 #判断,如果是最后一页,就没有下一页 if self.page_num >= self.total_page: html_str_list.append('
  • ') else: self.params["page"] = self.page_num + 1 html_str_list.append('
  • '.format(self.base_url, self.params.urlencode())) page_html = "".join(html_str_list) return page_html

    另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

    10年积累的网站制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有越城免费网站建设让你可以放心的选择与我们合作。
    本文题目:Django-自定义分页-创新互联
    网页地址:http://cxhlcq.com/article/ecsoh.html

    其他资讯

    在线咨询

    微信咨询

    电话咨询

    028-86922220(工作日)

    18980820575(7×24)

    提交需求

    返回顶部