博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分页器paginator,批量插入数据bulk_create

Posted on 2022-03-13 14:41  ~sang  阅读(189)  评论(0编辑  收藏  举报

分页器的使用

# 批量插入数据
# def books_page(request):
   # 第一种方案,每循环一次,操作一下数据库,性能低
   # for i in range(1000):
       # book=models.Book.objects.create(name='图书%s'%i,price=i+10,publish='东京出版社')
   # 第二种方式,批量插入
   # book_list=[]
   # for i in range(1000):
   #     book=models.Book(name='图书%s'%i,price=i+10,publish='东京出版社')
   #     book_list.append(book)
   # models.Book.objects.bulk_create(book_list,batch_size=100)
   # return HttpResponse('ok')
   
# 分页器的使用
# 后端
from django.core.paginator import Paginator
def books_page(request):
   book_list=models.Book.objects.all()
   paginator=Paginator(book_list,10)
   # Paginator对象的属性
   # print(paginator.count) # 数据总条数
   # print(paginator.num_pages) # 总页数
   # print(paginator.per_page) # 每页显示条数
   # print(paginator.page_range) # range(1, 101) 页数范围
   # print(paginator.page(1)) # 第一页
   page=paginator.page(2)
   # 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) # 当前页
   return render(request,'books_page.html',{'page':page})
# 前端
<tbody>
{% for book in page.object_list %}
   <tr>
       <td>{{ book.id }}</td>
       <td>{{ book.name }}</td>
       <td>{{ book.price }}</td>
       <td>{{ book.publish }}</td>
   </tr>
{% endfor %}
</tbody>

分页器终极用法

# 后端
from django.core.paginator import Paginator
def books_page(request):
   current_num=int(request.GET.get('page_num',1))
   book_list=models.Book.objects.all()

   paginator=Paginator(book_list,10)
   try:
       page=paginator.page(current_num)
   except Exception as e:
       current_num=1
       page=paginator.page(current_num)

   if paginator.num_pages>11:
       if current_num-5<1:
           page_range=range(1,12)  # 页数范围
       elif current_num+5>paginator.num_pages:
           page_range=range(paginator.num_pages-10,paginator.num_pages+1)
       else:
           page_range=range(current_num-5,current_num+6)
   else:
       page_range=paginator.page_range
   return render(request,'books_page.html',locals())
# 前端
<body>
<div class="container-fluid">
   <div class="row">
       <h1 class="text-center">图书列表</h1>
       <div class="col-md-6 col-md-offset-3">
           <table class="table table-hover">
               <thead>
               <tr>
                   <th>编号</th>
                   <th>书籍名称</th>
                   <th>价格</th>
                   <th>出版社</th>
               </tr>
               </thead>
               <tbody>
              {% for book in page.object_list %}
                   <tr>
                       <td>{{ book.id }}</td>
                       <td>{{ book.name }}</td>
                       <td>{{ book.price }}</td>
                       <td>{{ book.publish }}</td>
                   </tr>
              {% endfor %}

               </tbody>
           </table>
           <div class="text-center">
               <nav aria-label="Page navigation">
                   <ul class="pagination">
                      {% if page.has_previous %}
                           <li>
                               <a href="/books_page/?page_num={{ page.previous_page_number }}" aria-label="Previous">
                                   <span aria-hidden="true">&laquo;</span>
                               </a>
                           </li>
                      {% else %}
                           <li class="disabled">
                               <a href="" aria-label="Previous">
                                   <span aria-hidden="true">&laquo;</span>
                               </a>
                           </li>
                      {% endif %}
                      {% for foo in page_range %}
                          {% if current_num == foo %}
                               <li class="active"><a href="/books_page/?page_num={{ foo }}">{{ foo }}</a></li>
                          {% else %}
                               <li><a href="/books_page/?page_num={{ foo }}">{{ foo }}</a></li>
                          {% endif %}
                      {% endfor %}
                      {% if page.has_next %}
                           <li>
                               <a href="/books_page/?page_num={{ page.next_page_number }}" aria-label="Next">
                                   <span aria-hidden="true">&raquo;</span>
                               </a>
                           </li>
                      {% else %}
                           <li class="disabled">
                               <a href="" aria-label="Previous">
                                   <span aria-hidden="true">&laquo;</span>
                               </a>
                           </li>
                      {% endif %}
                   </ul>
               </nav>
           </div>

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