• Django 分页器pagintor的使用


    # Django 分页器的使用pagintor #

    >在视图文件下views.py
        
      

       from django.shortcuts import render, HttpResponse 
        
        from slyajax.models import *  
        
        from django.core.paginator import Paginator, EmptyPage     #调用Paginator方法
    
        def pags(request):
            goods_list = Goods.objects.all()   #得到QUERYSET列表。
            paginator = Paginator(goods_list, 4)  #使用Paginator方法得到paginator对象
            
            ###### paginator对象的方法 #########
            #print(paginator.count)         #显示所有数据条数
            #print(paginator.page_range)    #分页器的页数范围
            #print(paginator.num_pages)     #分液器总页数
        
            current_page_num = int(request.GET.get('page', 1))   #获得请求的页数,默认值为1,当GET没有值时显示第一页的内容。
            #以下是页面显示效果:,当页数大于11页数时,将显示当前页的前5页和后5页的页码,如果选择的页码小于5时,显示的页码为1至11页,如果页码加5大于最大页码数时,显示最后11页的页码。    如果总页数小于11页时就正常显示页码。    
            if paginator.num_pages > 11:
                if current_page_num-5 < 1:  #当前页-5如果小于1的话,说明页码已经是小于5的,那么页码范围就显示前11页数。
                                            #这里也可以写成 if current_page_num < 6 。这样显得更容易理解。
                    current_range = range(1, 11)
                elif current_page_num+5 > paginator.num_pages:    #当前页码+5大于最大页码时,说明已经到达最后的5页了。那么页码范围就显示后11页数。
                                            #这里也可以写成 elif current_page_num > paginator.num_pages-5 。容易理解。
                    current_range = range(paginator.num_pages-10, paginator.num_pages+1)
                else:
                    current_range = range(current_page_num-5, current_page_num+6)  #显示当前页的前五和后五页码数。
            else:
                current_range = paginator.page_range   #否则正常显示页码数。
            try:
                current_page = paginator.page(current_page_num)    #当页码超出范围时,会抛出异常。
                # page1 = paginator.page(1)
                # print(page1.object_list)
                # for i in page1:
                #     print(i)
            except EmptyPage as e:    #异常的解决方案为当前页码内容显示为第一页。
               
                current_page = paginator.page(1)
        
        
            return render(request, 'pags.html', locals())
        
        
        ####批量对数据库添加数据####
            # goods_list = []
            # for i in range(100):
            #     goods = Goods(name='goods%s'%i, price=i*i)
            #     goods_list.append(goods)
            # Goods.objects.bulk_create(goods_list)
      ####HTML页面的代码为####
        <body>
        <ul>
            {% for goods in current_page %}
                <li>{{ goods.name }} | {{ goods.price }}</li>
            {% endfor %}
        </ul>
        <nav aria-label="Page navigation">
            <ul class="pagination">
                ##这里是当页面达到最前页时,向上按钮不可用disabled。这里使用has_previous来获取当前页是否有前页(返回值为布尔型),使用previous_page_number来获取前一页的的页码数。###
                {% if current_page.has_previous %}
                    <li><a href="?page={{ current_page.previous_page_number }}" 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 %}
        
        
                {% for page_nums in current_range %}  #获得页码数的显示范围
                    {% if current_page_num == page_nums %}   #当前显示页面的页码设置为active。
                        <li class="active"><a href="?page={{ page_nums }}">{{ page_nums }}</a></li>
                    {% else %}
                        <li><a href="?page={{ page_nums }}">{{ page_nums }}</a></li>
                    {% endif %}
        
                {% endfor %}
                #这里是下一页按钮的设置,使用has_next来获得是否有下一页,用next_page_number来获取下一页的页码数。
                {% if current_page.has_next %}
                    <li><a href="?page={{ current_page.next_page_number }}" 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 %}
        
            </ul>
        </nav>
        </body>
    

      

  • 相关阅读:
    Ajax(三)
    Ajax(二)
    Django(四)
    Ajax(一)
    Django(三)
    Django(二)
    Django(一)
    Http协议
    Bootstrap
    python 绑定方法
  • 原文地址:https://www.cnblogs.com/sly27/p/10124671.html
Copyright © 2020-2023  润新知