django_自带分页_自定制


一、自带分页,一些常用参数

注明函数中的paginator.page(current_page)更多的使用在html页面,current_page用来接收前端返回的页数值

  • import 引入
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  • 负责后台处理的Paginator函数

paginator = Paginator(USER_LIST,10)两个参数分别接收,数据库中的总条数,和每页显示多少条,其他的返回函数分别有:

# per_page: 每页显示条目数量
    # count:    数据总个数
    # num_pages:总页数
    # page_range:总页数的索引范围,如: (1,10),(1,200)
    # page:     page对象(是否具有上一页,下一页)
  • 用来处理前端的page,也是Paginator返回函数

用来判断是否具有上一页,下一页,因此接收的是,页面返回的页数

posts = paginator.page(current_page),页数有不确定性所以用异常处理做处理,常见的返回函数

        # has_next              是否有下一页
        # next_page_number      下一页页码
        # has_previous          是否有上一页
        # previous_page_number  上一页页码
        # object_list           分页之后的数据列表
        # number                当前页
        # paginator             paginator对象
  • 代码案例
def index1(request):
    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

    current_page = request.GET.get(‘page‘)
    paginator = Paginator(USER_LIST,10)
    # per_page: 每页显示条目数量
    # count:    数据总个数
    # num_pages:总页数
    # page_range:总页数的索引范围,如: (1,10),(1,200)
    # page:     page对象(是否具有上一页,下一页)
    try:
        posts = paginator.page(current_page)
        # has_next              是否有下一页
        # next_page_number      下一页页码
        # has_previous          是否有上一页
        # previous_page_number  上一页页码
        # object_list           分页之后的数据列表
        # number                当前页
        # paginator             paginator对象
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    except PageNotAnInteger:
        posts = paginator.page(1)

    return render(request,‘index1.html‘,{‘posts‘:posts})
  • 在前端处理的时候

可以在templates,目录下创建include文件夹,里面放置写好的分页前端的代码块,用{% include ‘incldue/pager.html‘ %}调用部分代码

//是否有上一页
{% if posts.has_previous %}
    <a href="/index1?page={{ posts.previous_page_number }}">上一页</a>
//没有上一页,不让点击
{% else %}
    <a href="#">上一页</a>
{% endif %}
//是否有下一页
{% if posts.has_next%}
    <a href="/index1?page={{ posts.next_page_number }}">下一页</a>
//没有下一页,不让点击
{% else %}
    <a href="#">下一页</a>
{% endif %}

数据展示用的是has_previous函数

<ul>
{% for i in posts %}
    <li>{{ i }}</li>
{% endfor %}

</ul>

二、自定制

python 自带的分页,由于妻子输入你的功能缺陷,我们可以对其自定制,让页面展示底栏的页数,还可以进行跳转设置

  • 原理

想要在html页面改变效果,就要对Paginator.page进行处理,为了避免在源码直接处理的尴尬,选着继承的方式,整体的思路如下:

#保证循环的次数在规定的展示栏个数,如果设置11,循环的次数保证在11次
class CustomPaginator(Paginator):
    def __init__(self,  current_page, per_pager_num,*args, **kwargs):
        ‘‘‘
        :param current_page:  当前页
        :param per_pager_num: 底边栏展示页数
        ‘‘‘
        self.current_page = int(current_page)
        self.per_pager_num = int(per_pager_num)
        super(CustomPaginator, self).__init__(*args, **kwargs)

    def page_num_range(self):
  #总页数小于实际展示页
        if self.num_pages < self.per_pager_num:
            return range(1,self.num_pages+1)

        #part 当前总展示栏中间点5
        part = int(self.per_pager_num//2)

        #最小页数为1防止出现负数情况
        if self.current_page <= part:
            return range(1,self.per_pager_num+1)

        #最大页数为实际总页数
        if(self.current_page+part)>self.num_pages:
            return range(self.num_pages-self.per_pager_num+1,self.num_pages+1)

        return range(self.current_page-part,self.current_page+part+1)

跟上面的变动的位置

image.png

以后自定制是要调用我们写的函数

paginator = CustomPaginator(11,current_page,USER_LIST,10)

其中11是底栏最多展示条数 ,‘current_page‘当前页

  • 前端显示
 {% for i in posts.paginator.page_num_range%}
        {% if i == posts.number  %}
            <a style="font-size: 30px" href="index1/?page={{ i }}">{{ i }}</a>
        {% else %}
            <a  href="/index1/?page={{ i }}">{{ i }}</a>
        {% endif %}
    {% endfor %}

作者:毅个测试
链接:https://www.jianshu.com/p/87e6d1392f54
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

image.png

以后自定制是要调用我们写的函数

paginator = CustomPaginator(11,current_page,USER_LIST,10)

其中11是底栏最多展示条数 ,‘current_page‘当前页

  • 前端显示
 {% for i in posts.paginator.page_num_range%}
        {% if i == posts.number  %}
            <a style="font-size: 30px" href="index1/?page={{ i }}">{{ i }}</a>
        {% else %}
            <a  href="/index1/?page={{ i }}">{{ i }}</a>
        {% endif %}
    {% endfor %}

作者:毅个测试
链接:https://www.jianshu.com/p/87e6d1392f54
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文地址:https://www.cnblogs.com/yuanlaishixiaosa/p/9270632.html

时间: 2024-10-10 19:44:04

django_自带分页_自定制的相关文章

jdbc案例_分页_条件查询

客户信息增删改查系统 软件工程开发流程:1.瀑布模型 2.螺旋模型 RUP (Rational Unified Process,统一软件开发过程 ) 采用瀑布模型: 需求 --- 需求分析 --- 系统设计(概要.详细设计)---- 编码 --- 测试 --- 实施 --- 维护 * 瀑布模型 缺陷在编码结束之前,客户看不到最终软件产品 ,如果需求.设计出现明显错漏,导致软件后期无法维护,存在重大缺陷 * 瀑布模型对于 新型软件,需求不定软件 风险较大 敏捷开发理念:迭代开发模式 ,将系统功能分

thinkphp自带分页类

thinkphp自带分页使用案例: $Data = M('Data'); // 实例化Data数据对象  date 是你的表名     import('ORG.Util.Page');// 导入分页类     $count = $Data->where($map)->count();// 查询满足要求的总记录数 $map表示查询条件     $Page = new Page($count);// 实例化分页类 传入总记录数     $show = $Page->show();// 分页显

使用GridView自带分页的代码

关于GridView分页页码的讨论 在GridView中实现分页的效果方法非常easy,仅仅须要在"GridView任务"对话框中进行设置就能够了.在"GridView任务"对话框中,选择"启用分页"命令,这样建立起简单的分页效果. 在使用"启用分页"命令的时候要注意两点. (1)  是否同意分页 GridView的AllowPaging属性.AllowPaging:是否同意分页.假设AllowPaging="tru

ExtJS4.2 仅需配置URL动态加载GridPanel列(带分页)

最近做ExtJS一直想做个傻瓜式的GridPanel,今天折腾了一天,从GitHub找到的老外写的解决方案, 在他的基础上做了一些改动,增加了分页,增加了columns手动配置(原本只能动态生成),大家有兴趣可以自由扩展,我做了很详细的注释 效果图如下,仅需在html页面引入ext.all,并创建自定义控件,配置url即可创建带分页效果的GirdPanel 代码: 效果图: 一.动态加载自定义控件 自定义脚本包括两部分:DynamicGrid.js和DynamicReader.js 将Ext目录

瀑布流代码,简洁版 带分页

接上一篇   瀑布流代码,简洁版 的功能之上添加分页的功能 Index.cshtml @using PagedList.Mvc @model PagedList.StaticPagedList<int> @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui

第六章_编写定制标签

6.1.定制标签概述 利用jsp标准动作指令访问和操作javaBeans,是首次尝试将表现代码和业务逻辑实现分离.但是,标准动作指令的功能不够强大,单独使用时,开发者经常要使用jsp页面中的java代码.例如,标准动作指令无法像jstl的forEach标签那样迭代集合. 认识到了用javabean分离表现逻辑和业务逻辑的不足之处之后,jsp1.1就定义了定制标签.定制标签具有javaBeans所没有的优势.例如,定制标签可以访问jsp隐式对象,可以带有属性等. 6.2.简单的标签处理器 在jsp

[Laravel] 自带分页实现以及我的报错

自带分页实现其实挺简单的,但是我在实现的时候报错!找了很久才找出原因! 废话不说上码 控制器LeeController.php层 1 <?php 2 namespace App\Http\controllers; 3 4 use App\Lee; 5 use Illuminate\Support\Facades\DB; 6 use Illuminate\Http\Request; 7 8 9 class LeeController extends Controller { 10 11 publi

联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐

联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐 衬衫乐定制网是国内领先的成衣定制机构,专业从事衬衫网络在线定制.高级定制服装的价格不菲,而衬衫乐运用了"网上面料和款式随意搭配"的定制模式,省去常规店铺高昂的营运成本, 相比原始成衣定制业,在品质不变的的情况下价格优惠了很多.衬衫乐拥有先进的进口生产设备,多年的定制经验,精湛的工艺,国内外多家面料商直接供货的面料多样性优势,为您量身打造 一套专属于您自己的高级衬衫,让您享受贴身.舒适的着装感受,

自制 JS.format带分页索引

//第一参数是:Json对象,第二个是   序号  第三个   页数     第四  当前页数String.prototype.format = function (args, sid, pagesize, currentpage) {        if (arguments.length > 0) {        var result = this;        if (arguments.length == 1 && typeof (args) == "objec