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语句实现了
数据的插入,效率明显高多了,推荐大家使用这种方法,如下:
2>数据显示
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后面加?再加值),来进行分页的数据显示,如下
当通过不同的page页数,便实现了显示不同内容的效果,
如上,url输入不同的page页数,显示了不同的数据对象,
下面的分页器是直接从bootstrap官网拷贝的,接下来就是通过点击页数来传递这个page参数,控制分页显示。
以上,便实现了简单版的分页显示效果,恩,这是数据量小的时候,若我们数据量很大时,会出现如下效果
很显然,让所有的页签数都显示出来,不太合理,需要优化下。
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()) #上一页的页码,返回下页的页码
接下来,就差一点点了,处理下 “上一页”和“下一页”