zoukankan      html  css  js  c++  java
  • django第11天(分页器)

    django第11天分页器

    分页模块

    批量插入数据
    book_list = []
    #先生成对象
    for i in range(100):
        book = Book(name = 'book%s'%i,price=10+i)
        book_list.append(book)
    #操作对象列表,设置一次操作多少条数据
    Book.objects.bulk_create(book_list,10)
    

    分页器及其方法

    1.导入分页器模块
    from django.core.paginator import Paginator
    
    2.生成分页器对象
    第一个参数为分页对象列表,第二个参数为一页的数量
    paginator = Paginator(book_list,10)
    
    3.分页常用方法
    #分页对象的总数
    count = paginator.count()
    #分成的总页数
    num_pages = paginator.num_pages()
    #页数的范围
    page_range = paginator.page_range
    
    #当前页面数从前台获取
    try:
    	current_page_num = int(request.GET.get('page',1))
    except:
        current_page_num = 1
        
    #通过当前页数,获得当前页的对象列表(返回给前台迭代显示对象)    
    current_page = paginator.page(current_page_num)
    
    # 是否有上一页
    current_page.has_previous()
    # 上一页编码
    current_page.previous_page_number()
    # 是否有下一页
    current_page.has_next()
    # 下一页编码
    current_page.next_page_number()
    
    

    基础分页器编写

    1.后台
    
    from django.core.paginator import Paginator
    
    def index(request):
        #获取图书对象
        book_list = Book.objects.all()
        #生成分页器对象
        paginator = Paginator(book_list,10)
        #获取页码范围,以便前台产生分页个数
        page_range = paginator.page_range
        #从前台获取当前页数,如果是第一次访问就返回第一页
        try:
            current_page_num = int(request.GET.get('page',1))
        except:
            current_page_num =1
        #通过当前页数,获得current_page,可迭代获得当前页所有对象
        current_page = paginator.page(current_page_num)
        return render(request,'index.html',locals())
    
    
    前台
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <h1>图书详情</h1>
                <table class="table">
                    <tr>
                        <th>图书名称</th>
                        <th>图书价格</th>
                    </tr>
                    #仅展示当前页数的所有对象
                    {% for book in current_page %}
                        <tr>
                            <td>{{ book.name }}</td>
                            <td>{{ book.price }}</td>
                        </tr>
                    {% endfor %}
                </table>
                <nav aria-label="Page navigation">
                    <ul class="pagination">
                        <li>
                        	#如果存在上一页,当前页码减去1
                            {% if current_page.has_previous %}
                                <a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">
                            {% else %}
                            #如果不存在不进行操作
                                <a href="javascript:void(0)" aria-label="Previous">
                            {% endif %}
                            <span aria-hidden="true">上一页</span>
                            </a>
                        </li>
                        #通过页数生成分页项
                        {% for foo in page_range %}
                            <li>
                                <a href="?page={{ foo }}">{{ foo }}</a></li>
                            <li>
                        {% endfor %}
                        <li>
                            {% if current_page.has_next %}
                                <a href="?page={{ current_page_num|add:1 }}" aria-label="Next">
                            {% else %}
                                <a href="javascript:void(0)" aria-label="Next">
                            {% endif %}
                            <span aria-hidden="true">下一页</span>
                            </a>
                        </li>
                    </ul>
                </nav>
            </div>
        </div>
    </div>
    

    高级分页器编写

    当对象个数过多,分的页数过多时,需要将分页器优化,不然会显示一大堆的分页
    
    设计要求:
        除了首末页,只显示选中页数,前5页和后5页
    前台:
        <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <h1>图书详情</h1>
                <table class="table">
                    <tr>
                        <th>图书名称</th>
                        <th>图书价格</th>
                    </tr>
                    {% for book in current_page %}
                        <tr>
                            <td>{{ book.name }}</td>
                            <td>{{ book.price }}</td>
                        </tr>
                    {% endfor %}
                </table>
                <nav aria-label="Page navigation">
                    <ul class="pagination">
                        <li>
                            {% if current_page.has_previous %}
                                <a href="?page={{ current_page_num|add:-1 }}" aria-label="Previous">
                            {% else %}
                                <a href="javascript:void(0)" aria-label="Previous">
                            {% endif %}
                            <span aria-hidden="true">上一页</span>
                            </a>
                        </li>
                        {% if current_page_num == 1 %}
                            <li class="active">
                                {% else %}
                            <li>
                        {% endif %}
                        <a href="?page=1">1</a></li>
                        {% if num_pages > 14 %}
                            <li><a href="javascript:void(0)">...</a></li>
                        {% endif %}
                        {% for num in page_range %}
                            {% if current_page_num == num %}
                                <li class="active">
                                    {% else %}
                                <li>
                            {% endif %}
                        <a href="?page={{ num }}">{{ num }}</a></li>
                        {% endfor %}
                        {% if num_pages > 13 %}
                            <li><a href="javascript:void(0)">...</a></li>
                        {% endif %}
    
    
                        {% if current_page_num == num_pages %}
                            <li class="active">
                                {% else %}
                            <li>
                        {% endif %}
                        <a href="?page={{ num_pages }}">{{ num_pages }}</a></li>
                        <li>
                            {% if current_page.has_next %}
                                <a href="?page={{ current_page_num|add:1 }}" aria-label="Next">
                            {% else %}
                                <a href="javascript:void(0)" aria-label="Next">
                            {% endif %}
                            <span aria-hidden="true">下一页</span>
                            </a>
                        </li>
                    </ul>
                </nav>
            </div>
    
    
        </div>
    </div>
        
        
        
       
        
        
    后台: 
    def index(request):
        book_list = Book.objects.all()
        paginator = Paginator(book_list,6)
        count = paginator.count
        num_pages = paginator.num_pages
        page_range = paginator.page_range
        try:
            current_page_num = int(request.GET.get('page',1))
        except:
            current_page_num =1
        current_page = paginator.page(current_page_num)
        if num_pages > 13:
            if current_page_num <7 :
                page_range = range(2,12)
            elif current_page_num +6 > num_pages:
                page_range = range(num_pages-10,num_pages)
            else:
                page_range = range(current_page_num-5,current_page_num+6)
        else:
            page_range = range(2,13)
        return render(request,'index.html',locals())
            
    
  • 相关阅读:
    将.lib库文件转换成.a库文件的工具
    协议
    协议
    bzoj1066
    bzoj2668
    bzoj2245
    bzoj2324后续思考
    bzoj2324
    jsoi2014前两轮回眸
    bzoj1293
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10569652.html
Copyright © 2011-2022 走看看