分页器(分页器基本操作、)
分页器基本操作
用户访问一个网页或者查看某些数据,如果数据量过大肯定需要按页查看,不可能一个页面显示N条数据内容这里就用到了分页器
- 首先往数据库里插入数据,这里咱们进行脚本批量插入
# #脚本批量插入数据 book_list = [] for i in range(200): #创建200条数据 book = Book(title='book_%s'%i,price=i*i) book_list.append(book) #批量插入语法 Book.objects.bulk_create(book_list)
这样一条insert语句包含多条数据,一次性插入
- 分页器的基本语法及使用
def index(request): #分页器对使用 book_list = Book.objects.all() paginator = Paginator(book_list,10) #多少数据分一页 print('coumt:',paginator.count) #数据总数 print('num_pages:',paginator.num_pages) #总页数 print('page_range:',paginator.page_range) #页码列表 #获取某页的方式 #方式一 page1=paginator.page(1) #获取第一页的page对象 #方式二 for i in page1: #遍历第一页的所有数据 print(i) #根据用户选择来进行页面显示,获取用户的页数 try: #这里捕获异常到目的就是为了用户选择页码以外到值不会报错 current_page=int(request.GET.get('page',1)) #这里要记得传一个默认值否则会报错,因为views 没有获取到page这个参数 current_page=paginator.page(current_page) except EmptyPage as e: current_page =paginator.page(1) return render(request,'index.html',locals())
#输出内容
coumt: 200 num_pages: 20 page_range: range(1, 21) Book object (1) Book object (2) Book object (3) Book object (4) Book object (5) Book object (6) Book object (7) Book object (8) Book object (9) Book object (10)
- 前端页面的显示,传递分页过后的对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分页器</title> </head> <body> <ul> {#这里传递分页过后到内容#} {% for book in current_page %} <li>{{ book.title }} : {{ book.price }}</li> {% endfor %} </ul> </body> </html>
- 效果图
因为默认访问显示的为第一页内容,如是果想访问其他页需要 给后端传递 page 参数
更换页码 URL