Django学习之分页器

1>数据批量插入

    网站内容记录很多,必然要分页显示,比如100条数据,每页显示10条,那么总共就有10页,点击对应的页签,则

    显示相应的内容,实现这个需求之前,我们先看怎么对mysql批量插入数据,

    一个方法,for循环再插入,如下,

    for i in range(1, 101):
        Book.objects.create(title='book_%s'%i, price=i**2)

   但这个方法始终都是“一条一条”插入的,翻译成sql语句其实就是有100条insert语句,很明显,效率不是太高,

   其实dajngo中自带一个批量插入的语法,可以把循环出来的数据一次性插入数据库,就相当于一条sql语句实现了

  数据的插入,效率明显高多了,推荐大家使用这种方法,如下:

    Django学习之分页器

2>数据显示

    Django学习之分页器

3>分页显示效果

    先说几个概念,导入分页器模块,加粗的都是分页器经常使用的方法

    from django.core.paginator import Paginator
    book_obj = Book.objects.all()
    paginator = Paginator(book_obj, 10)    # 生成分页器,两个参数,一个被分页对象,一个是每页显示记录条数
    print("count:",paginator.count)           # 数据总数
    print("num_pages",paginator.num_pages)    # 总页数
    print("page_range",paginator.page_range)  # 页码的列表
    page1=paginator.page(1) # 第1页的page对象
    for i in page1:         # 遍历第1页的所有数据对象
        print(i)

    print(page1.object_list) # 第1页的所有数据

    如上,有了这个根据页数取对象的函数,我们可以把这个页数传递给url,url接收到页数值,再显示对应页数的数据,

    通过给url传递参数page(get请求传值,url后面加?再加值),来进行分页的数据显示,如下

    Django学习之分页器

    Django学习之分页器

    当通过不同的page页数,便实现了显示不同内容的效果,

    Django学习之分页器Django学习之分页器

   如上,url输入不同的page页数,显示了不同的数据对象,

   下面的分页器是直接从bootstrap官网拷贝的,接下来就是通过点击页数来传递这个page参数,控制分页显示。

    Django学习之分页器

Django学习之分页器

以上,便实现了简单版的分页显示效果,恩,这是数据量小的时候,若我们数据量很大时,会出现如下效果

Django学习之分页器

很显然,让所有的页签数都显示出来,不太合理,需要优化下。

4>分页效果优化

    当页数实在太多时,我们不可能把所有的页数全部显示出来,比如我固定就显示7页,当我点击“中间”一些页数的时候,

    两边固定显示前3页和后3页,改动如下:

    同样,先引入几个概念,等下会用到

   current_page = paginator.page(current_page)
   print(current_page.has_next())            #是否有下一页,返回bool值
   print(current_page.next_page_number())    #下一页的页码,返回下页的页码
   print(current_page.has_previous())        #是否有上一页,返回bool值
   print(current_page.previous_page_number()) #上一页的页码,返回下页的页码

   Django学习之分页器

   Django学习之分页器

   Django学习之分页器

   Django学习之分页器

   Django学习之分页器

接下来,就差一点点了,处理下 “上一页”和“下一页”

Django学习之分页器

Django学习之分页器

Django学习之分页器