博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DJANGO 自定义分页组件
阅读量:6331 次
发布时间:2019-06-22

本文共 5779 字,大约阅读时间需要 19 分钟。

 

分页第二版:

from django.utils.safestring import mark_safeclass Pagination(object):    def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):        try:            self.current_page = int(current_page)        except Exception as e:            self.current_page = 1        self.data_count = data_count        self.per_page_count = per_page_count        self.pager_num = pager_num    @property    def start(self):        return (self.current_page - 1) * self.per_page_count    @property    def end(self):        return self.current_page * self.per_page_count    @property    def total_count(self):        v, y = divmod(self.data_count, self.per_page_count)        if y:            v += 1        return v    def page_str(self, base_url):        page_list = []        if self.total_count < self.pager_num:            start_index = 1            end_index = self.total_count + 1        else:            if self.current_page <= (self.pager_num + 1) / 2:                start_index = 1                end_index = self.pager_num + 1            else:                start_index = self.current_page - (self.pager_num - 1) / 2                end_index = self.current_page + (self.pager_num + 1) / 2                if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:                    end_index = self.total_count + 1                    start_index = self.total_count - self.pager_num + 1        if self.current_page == 1:            prev = '
  • 上一页
  • ' else: prev = '
  • 上一页
  • ' % (base_url, self.current_page - 1,) page_list.append(prev) for i in range(int(start_index), int(end_index)): if i == self.current_page: temp = '
  • %s
  • ' % (base_url, i, i) else: temp = '
  • %s
  • ' % (base_url, i, i) page_list.append(temp) if self.current_page == self.total_count: nex = '
  • 下一页
  • ' else: nex = '
  • 下一页
  • ' % (base_url, self.current_page + 1,) page_list.append(nex) # jump = """ # GO # # """ % (base_url,) # # page_list.append(jump) page_str = mark_safe("".join(page_list)) return page_str
    pagination.py

     

     

     

     

    第一次在码云上面分享代码片段,记录一下:

    https://gitee.com/trunkslisa/codes/14gkxi3zf9e2ulbvjnqyo90

     

     

    class Pagination(object):    def __init__(self, totalCount, currentPage, perPageNum=20, maxPageNum=7):        # 传入:        # -所有数据的个数 totalCount        self.totalCount = totalCount        # -当前页       currentPage        try:            v = int(currentPage)            if v < 0:                v = 1            self.currentPage = v        except Exception as e:            self.currentPage = 1        # -每页显示??行 perPageNum        self.perPageNum = perPageNum        # -最多显示??页 maxPageNum        self.maxPageNum = maxPageNum    # 开始条数    def start(self):        return (self.currentPage - 1) * self.perPageNum    # 结束条数    def end(self):        return self.currentPage * self.perPageNum    # 总页数    # 采用这个装饰器以后,本来需要用self.num_pages()这个方法的,后面的括号可以不用写了    @property    def num_pages(self):        # 取余数,不等于0的+1        a, b = divmod(self.totalCount, self.perPageNum)        if b == 0:            return a        return a+1    # 根据情况生成相应的页码list    def pager_num_range(self):        # range应该根据当前页动态生成,自定制显示数量        # 代指当前页           #self.current_page        # 最多显示的页码数量     #self.per_page_num        # 总页数              #self.num_pages        # 判断一下传入的页码是否大于总页数        if self.currentPage > self.num_pages:            self.currentPage = self.num_pages        # 总页数小于当前页        if self.num_pages < self.currentPage:            return range(1, self.num_pages+1)        # 总页数有很多        part = int(self.maxPageNum/2)    #拿到显示总数量的一半        if self.currentPage <= part:            return range(1, self.maxPageNum+1)        # 判断当前页+part大于最后一页,显示最后一页至最后一页往前的per_pager_num的数量+1        if (self.currentPage + part) > self.num_pages:            return range(self.num_pages - self.maxPageNum + 1, self.num_pages+1)        return range(self.currentPage - part, self.currentPage + part + 1)    def page_str(self):        page_list = []        #首页        first = '
  • 首页
  • ' page_list.append(first) #增加上一页 if self.currentPage == 1: prev = '
  • 上一页
  • ' else: prev = '
  • 上一页
  • ' % (self.currentPage - 1) page_list.append(prev) #增加页码 for i in self.pager_num_range(): #给当前页做特殊标识 if i == self.currentPage: temp = '
  • %s
  • ' %(i) else: temp = '
  • %s
  • ' %(i,i) page_list.append(temp) #增加下一页 if self.currentPage >= self.num_pages: nex = '
  • 下一页
  • ' else: nex = '
  • 下一页
  • ' %(self.currentPage + 1) page_list.append(nex) #增加尾页 last = '
  • 尾页
  • ' %(self.num_pages) page_list.append(last) return ''.join(page_list)
    通过自定制的py文件,今后可以方便的引用分页组件
    from app01.pager import Paginationfrom django.shortcuts import renderfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerUSER_LIST = []for i in range(1, 666):    temp = {
    'name': 'root' + str(i), 'age': i} USER_LIST.append(temp)def index(request): current_Page = request.GET.get('p') #这里的666是个模拟数据,实际使用中应用实际数量替换该位置 page_obj = Pagination(666, current_Page) #这里的USER_LIST是自己创建的模拟数据,主要为页面展示使用 data_list = USER_LIST[page_obj.start():page_obj.end()] return render(request, 'index3.html', {
    'data': data_list, 'page_obj': page_obj})
    分页组件引用方式
        
    Title
      {
      % for row in data %}
    • {
      { row.name}}-{
      { row.age }}
    • {
      % endfor %}
    分页前端展示,引入了bootstarp模块进行了美化

     

    转载于:https://www.cnblogs.com/trunkslisa/p/9542310.html

    你可能感兴趣的文章
    awesome go library 库,推荐使用的golang库
    查看>>
    树形展示形式的论坛
    查看>>
    jdbcTemplate 调用存储过程。 入参 array 返回 cursor
    查看>>
    C++中的stack类、QT中的QStack类
    查看>>
    Linux常用基本命令[cp]
    查看>>
    CSS 相对|绝对(relative/absolute)定位系列(一)
    查看>>
    关于 Nginx 配置 WebSocket 400 问题
    查看>>
    Glide和Govendor安装和使用
    查看>>
    Java全角、半角字符的关系以及转换
    查看>>
    Dubbo和Zookeeper
    查看>>
    前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
    查看>>
    UOJ#179. 线性规划(线性规划)
    查看>>
    整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
    查看>>
    windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
    查看>>
    JAVA中循环删除list中元素的方法总结
    查看>>
    redis 安装
    查看>>
    SQL some any all
    查看>>
    电子书下载:Programming Windows Identity Foundation
    查看>>
    有理想的程序员必须知道的15件事
    查看>>
    用于测试的字符串
    查看>>