首页 > 其他分享 >Django入门到放弃之分页器

Django入门到放弃之分页器

时间:2022-08-27 23:14:22浏览次数:125  
标签:paginator 分页 int Django range num print page 入门

1.属性和方法

#######1 Paginator对象的属性和方法
    book_list=models.Book.objects.all() # 注意all操作实际是分批次获取数据,当前版本为limit 21
    # 实例化得到对象
    # 第一个参数:要分页的数据,book_list
    # 第二个参数:没有条数
    paginator=Paginator(book_list,10) # 分页的数据  每页展示的数据个数
    # Paginator对象的属性和方法
    print(paginator.per_page) # 每页显示的条数
    print(paginator.count) # 总条数,总共要分页多少条数据
    print(paginator.num_pages) # 总页码数
    print(paginator.page_range) # 页码数生成器 rang(1,总页数+1)
    
    
######3 Page对象的属性和方法
    # Page类 的对象  
    page=paginator.page(2)   #  第一页的对象
    
    # 每一页的对象,属性和方法
    print(page.count())      # 每一页的页码数
    print(page.has_next())      # 有没有下一页
    print(page.next_page_number()) # 下一页页码
    print(page.has_previous())  # 是否有上一页
    print(page.previous_page_number()) # 上一页页面 (当前页如果是第一页,没有上一页)
    print(page.object_list)            # 当前页的所有数据
    print(page.number)           # 当前页的页码数

2.示例:  

urls.py

from app01 import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index,name='index'),
    path('test', views.test,name='test'),
]

view.py

from django.shortcuts import render, HttpResponse, reverse, redirect
from django.core.paginator import Paginator
from app01 import models


# Create your views here.

def index(request):
	# 设置跳转的页面,default=1为直接访问首页时初始化的值
    page_num_int = int(request.GET.get('page',default=1))  
    book_list = models.Book.objects.all()  # 注意all操作实际是分批次获取数据,当前版本为limit 21

    # 实例化对象
    # 设置每页展示的数据个数,默认为10
    per_page = int(request.GET.get('per_page',default=10))
    paginator = Paginator(book_list, per_page)  # 分页的数据  每页展示的数据个数

    # 如果总页数大于 展示个数+1 情况下,如果跳转的页面小于5则直接显示 1-10页,如果跳转的页面+5大于总页数则显示最后10页,否则显示当前页前5后5页
    # 如果总页数小于 展示个数+1 情况下,则展示全部页数
    if paginator.num_pages > 11:
        if (page_num_int - 5) < 1:
            page_range = range(1,11)
        elif page_num_int + 5 > paginator.num_pages:
            page_range = range(paginator.num_pages - 10,paginator.num_pages + 1)
        else:
            page_range = range(page_num_int - 5, page_num_int + 5) # 页码数生成器 rang(1,总页数+1)
    else:
        page_range = paginator.page_range
    page_obj = paginator.page(page_num_int)


    return render(request, 'index.html', locals())

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/jquery-3.3.1/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <style>
        # 设置placeholder字体颜色
        input::-webkit-input-placeholder{
            color:rgb(51, 122, 183);
        }
        input::-moz-placeholder{   /* Mozilla Firefox 19+ */
            color:rgb(51, 122, 183);
        }
        input:-moz-placeholder{    /* Mozilla Firefox 4 to 18 */
            color:rgb(51, 122, 183);
        }
        input:-ms-input-placeholder{  /* Internet Explorer 10-11 */
            color:rgb(51, 122, 183);
        }

        .pg {
            line-height: 26px;
        }

        #jump,#per_page_num {
            padding: -1px;
            margin: -1px;
            border: 1px solid rgb(221, 221, 221);
            width: 70px;
            line-height: 30px;
            font-size: 14px;
            color: rgb(51, 122, 183);
        }

        #x1,#x2 {
            padding: 0;
        }

    </style>
</head>
<body>
<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>名称</th>
                    <th>价格</th>
                </tr>
                </thead>
                <tbody>
                
                # 获取当前页所有数据,循环替换
                {% for page in page_obj.object_list %}
                    <tr>
                        <td>{{ page.id }}</td>
                        <td>{{ page.name }}</td>
                        <td>{{ page.price }}</td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>

            <div class="text-center">
                <nav aria-label="Page navigation">
                    <ul class="pagination pg">
                    # 如果当前页有上一页(跳转到首页),则跳转否则禁止点击
                        {% if page_obj.has_previous %}
                            <li>
                                {#    <a href="/?page={{ page_obj.previous_page_number }}" aria-label="Previous">#}
                                <a href="/?page=1&per_page={{ per_page }}" aria-label="Previous">
                                    <span aria-hidden="true">«</span>
                                </a>
                            </li>
                        {% else %}
                            <li class="disabled">
                                <a href="" aria-label="Previous">
                                    <span aria-hidden="true">«</span>
                                </a>
                            </li>
                        {% endif %}

					# 分页a标签添加跳转链接,当前页添加active属性
                        {% for page_num in page_range %}
                            {% if page_num_int == page_num %}
                                <li class="active"><a href="/?page={{ page_num }}">{{ page_num }}</a></li>
                            {% else %}
                                <li><a href="/?page={{ page_num }}&per_page={{ per_page }}">{{ page_num }}</a></li>
                            {% endif %}
                        {% endfor %}

						#如果不是最后一页则展示,否则不展示
                        {% if page_num_int !=  paginator.num_pages  %}
                             <li><a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}">... {{ paginator.num_pages }}</a></li>
                        {% endif %}

					# 如果有下一页则跳转,否则禁用
                        {% if page_obj.has_next %}
                            <li>
                                {#    <a href="/?page={{ page_obj.next_page_number }}" aria-label="Next">#}
                                <a href="/?page={{ paginator.num_pages }}&per_page={{ per_page }}" aria-label="Next">
                                    <span aria-hidden="true">»</span>
                                </a>
                            </li>
                        {% else %}
                            <li class="disabled">
                                <a href="" aria-label="Next">
                                    <span aria-hidden="true">»</span>
                                </a>
                            </li>
                        {% endif %}

						# 设置跳转
                        <li>
                               <span id="x1"><input type="text"   id="jump" size="2" title="输入页码,按回车快速跳转"   placeholder="{{ page_num_int }}/ {{ paginator.num_pages }} 页"
                                       onkeydown="if(event.keyCode===13) {window.location='?page='+this.value+'&per_page={{ per_page }}'; doane(event);}">
                                     </span>
                        </li>

						# 设置分页个数
                        <li>
                               <span id="x2">
                                   <input type="text"  id="per_page_num" size="2"  placeholder=" 条数:{{ per_page }}"
                                       onkeydown="if(event.keyCode===13) {window.location='?page='+ '{{ page_num_int }}&per_page=' + this.value; doane(event);}">
                               </span>
                        </li>
                    </ul>
                </nav>

            </div>
        </div>
    </div>
</div>

</body>
</html>

    

标签:paginator,分页,int,Django,range,num,print,page,入门
From: https://www.cnblogs.com/panwenbin-logs/p/16631748.html

相关文章

  • Django入门到放弃之ORM单表操作
    1.常用和非常用字段和参数概览#常用字段 -IntegerField整数-AutoField-BooleanField-CharField-DateField-DateTimeField-DecimalFi......
  • Django入门到放弃之模板及标签
    1.django模板使用的两种方式#方式一 returnrender(request,'time.html',context={'current_date':str(now),'title':'lqzNB'})#方式二(页面静态化,提高网站并发量)......
  • Django入门到放弃之常见配置及基本命令
    1.基本命令1.新建一个djangoproject django-admin.pystartprojectproject_name 特别是在windows上,如果报错,尝试用django-admin代替django-admin.py试试 2......
  • Django框架  快速查询目录
    Django框架 快速查询目录 django中前后端传输数据的编码格式(contentType)django中的中间件django中的cookie和sessiondjango中的csrf跨站请求伪造django中视图函数......
  • U8 V13.0小白入门开发记录十八-------------------初识UAP开发
    需要先认证二开的许可是否有二开的许可1.打开UAP应用  2.查看许可,如果没有需要联系官方客服获取相应的开发许可方式。 ......
  • U8 V13.0小白入门开发记录七-------------------插件开发(C#)调试
    这里继续延用上一章所写的内容举例。在上一章创建完工程并写完方法后,如何调试我们的业务逻辑呢? 1.首先登录我们的U8V13客户端 2.在VS打开的工程中,点击【调试】->【......
  • 7.3 SQL Server分页查询
    SQLServer分页查询目录SQLServer分页查询SQLServerOFFSETFETCHOFFSETFETCH示例A)要跳过前10个产品并选择下10个产品,请同时使用OFFSET和FETCH子句,如下所示:B)要获得前10......
  • U8 V13.0小白入门开发记录五-------------------自定义按钮开发(VB)调试
    这里继续延用上一章所写的内容举例。在上一章(U8V13.0小白入门开发记录四)创建完工程并写完方法后,如何调试我们的业务逻辑呢?1.首先登录我们的U8V13客户端     ......
  • 小记 【django git python】
    迁移此处生成的迁移文件包含了所有的表结构(已创建和未创建的表)pythonmanage.pymakemigrationsapp_namepythonmanage.pymigrate--fake-initial--fake-initial的......
  • Docker入门
    Dockerfile文件详解Docker的常用命令Centos7基于容器安装运行Docker私有仓库及添加认证Centos7本地安装运行Dockerregistry私有仓库及添加认证Centos下安装Docker集群管理......