DJANGO 自定义分页组件

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

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 = ‘<li><a href="/index3.html?p=1">首页</a></li>‘
        page_list.append(first)

        #增加上一页
        if self.currentPage == 1:

            prev = ‘<li><a href="#">上一页</a></li>‘
        else:
            prev = ‘<li><a href="/index3.html?p=%s">上一页</a></li>‘ % (self.currentPage - 1)

        page_list.append(prev)

        #增加页码
        for i in self.pager_num_range():
            #给当前页做特殊标识
            if i == self.currentPage:
                temp = ‘<li class="active"><a>%s</a></li>‘ %(i)
            else:
                temp = ‘<li><a href="/index3.html?p=%s">%s</a></li>‘ %(i,i)
            page_list.append(temp)

        #增加下一页
        if self.currentPage >= self.num_pages:
            nex = ‘<li><a href="#">下一页</a></li>‘
        else:
            nex = ‘<li><a href="/index3.html?p=%s">下一页</a></li>‘ %(self.currentPage + 1)
        page_list.append(nex)

        #增加尾页
        last = ‘<li><a href="/index3.html?p=%s">尾页</a></li>‘ %(self.num_pages)
        page_list.append(last)

        return ‘‘.join(page_list)

通过自定制的py文件,今后可以方便的引用分页组件

from app01.pager import Pagination
from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

USER_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})

分页组件引用方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/plugins/bootstrap/css/bootstrap.css">
</head>
<body>

<ul>
    {% for row in data %}
        <li>{{ row.name}}-{{ row.age }}</li>
    {% endfor %}
</ul>

<nav aria-label="...">
    <ul class="pagination pagination-sm">
        {{ page_obj.page_str|safe }}
    </ul>
</nav>

</body>
</html>

分页前端展示,引入了bootstarp模块进行了美化

原文地址:https://www.cnblogs.com/trunkslisa/p/9542310.html

时间: 2024-10-09 13:11:37

DJANGO 自定义分页组件的相关文章

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

extjs_09_自定义分页组件

1.项目截图 2.CustomSizePagingToolbar.js Ext.define("Ext.ux.CustomSizePagingToolbar", {// 定义的名字要和文件的名字大小写一样 extend : "Ext.toolbar.Paging", alias : "widget.custompaging",// 别名 beforSizeText : "每页", afterSizeText : "条

Angular4.+ ngx-bootstrap Pagination 自定义分页组件

Angular4 随笔(二)  --自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页组件,如:ng g component  pager 2.父组件调用子组件,并向子组件传入基础配置信息 3.分页组件接收父组件传参,并在模板上进行配置,在html模板上定义点击事件,调用分页子组件自身一个方法 4.分页组件定义发射器,当页码发生变化时,发射通知 5.父组件模板调用分页组件处,监听分页

vue自定义分页组件---切图网

vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重新切图,重新VUE开发的项目来说,自定义分页组件才是应万变的最佳打开方式. html <template> <div class="pagination" v-if="totalPage>1"> <span v-if="!s

Django自定义分页、bottle

一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1">1</a>,将page的值传送到函数/user_list/中,后端在user_list中通过request.GET.get('page',1)获取当前页; 3.从数据库中获取特定行的数据,使用result = models.UserList.objects.all()[start:end]获取,

Django 自定义分页类

分页类代码: class Page(object): ''' 自定义分页类 可以实现Django ORM数据的的分页展示 输出HTML代码: 使用说明: from utils import mypage page_obj = mypage.Page(total_num, current_page, 'publisher_list') publisher_list = data[page_obj.data_start:page_obj.data_end] page_html = page_obj.

jquery ajax自定义分页组件(jquery.loehpagerv1.0)原创

简单的两个步骤即可实现分页功能 <script src="<%=basePath%>/resources/js/jquery-1.7.1.min.js"></script> <script src="<%=basePath%>/resources/js/jquery.loehpagerv1.0.js"></script> <script type="text/JavaScript

django自定义分页器组件

class Pagination(object): def __init__(self,current_page,all_count,per_page_num=2,pager_count=11): """ 封装分页相关数据 :param current_page: 当前页 :param all_count: 数据库中的数据总条数 :param per_page_num: 每页显示的数据条数 :param pager_count: 最多显示的页码个数 用法: queryset

8.2 Django 分页组件替换自定义分页

Django的分页器(paginator) 总之不太好用我们还是用自己的好一些 自定义分页器 分页实现源码 """ 自定义分页组件 """ class Pagination(object): def __init__(self, current_page, all_count, base_url, params, per_page_num=8, pager_count=11, ): """ 封装分页相关数据 :par