循环插入数据测试

# ORM 帮我们提供了循环插入数据更快捷的方法:
book_list = []
for i in range(1000):
book_list.append(models.Book(title='第%s本书'%i))
models.Book.objects.bulk_create(book_list)

实现分页器

在app01文件夹中新建utils目录,新建自己实现的分页器方法mypage.py

class Pagination(object):
def __init__(self,current_page,all_count,per_page_num=2,pager_count=11):
"""
封装分页相关数据
:param current_page: 当前页
:param all_count: 数据库中的数据总条数
:param per_page_num: 每页显示的数据条数
:param pager_count: 最多显示的页码个数 用法:
queryset = model.objects.all()
page_obj = Pagination(current_page,all_count)
page_data = queryset[page_obj.start:page_obj.end]
获取数据用page_data而不再使用原始的queryset
获取前端分页样式用page_obj.page_html
"""
try:
current_page = int(current_page)
except Exception as e:
current_page = 1 if current_page <1:
current_page = 1 self.current_page = current_page self.all_count = all_count
self.per_page_num = per_page_num # 总页码
all_pager, tmp = divmod(all_count, per_page_num)
if tmp:
all_pager += 1
self.all_pager = all_pager self.pager_count = pager_count
self.pager_count_half = int((pager_count - 1) / 2) @property
def start(self):
return (self.current_page - 1) * self.per_page_num @property
def end(self):
return self.current_page * self.per_page_num def page_html(self):
# 如果总页码 < 11个:
if self.all_pager <= self.pager_count:
pager_start = 1
pager_end = self.all_pager + 1
# 总页码 > 11
else:
# 当前页如果<=页面上最多显示11/2个页码
if self.current_page <= self.pager_count_half:
pager_start = 1
pager_end = self.pager_count + 1 # 当前页大于5
else:
# 页码翻到最后
if (self.current_page + self.pager_count_half) > self.all_pager:
pager_end = self.all_pager + 1
pager_start = self.all_pager - self.pager_count + 1
else:
pager_start = self.current_page - self.pager_count_half
pager_end = self.current_page + self.pager_count_half + 1 page_html_list = []
# 添加前面的nav和ul标签
page_html_list.append('''
<nav aria-label='Page navigation>'
<ul class='pagination'>
''')
first_page = '<li><a href="?page=%s">首页</a></li>' % (1)
page_html_list.append(first_page) if self.current_page <= 1:
prev_page = '<li class="disabled"><a href="#">上一页</a></li>'
else:
prev_page = '<li><a href="?page=%s">上一页</a></li>' % (self.current_page - 1,) page_html_list.append(prev_page) for i in range(pager_start, pager_end):
if i == self.current_page:
temp = '<li class="active"><a href="?page=%s">%s</a></li>' % (i, i,)
else:
temp = '<li><a href="?page=%s">%s</a></li>' % (i, i,)
page_html_list.append(temp) if self.current_page >= self.all_pager:
next_page = '<li class="disabled"><a href="#">下一页</a></li>'
else:
next_page = '<li><a href="?page=%s">下一页</a></li>' % (self.current_page + 1,)
page_html_list.append(next_page) last_page = '<li><a href="?page=%s">尾页</a></li>' % (self.all_pager,)
page_html_list.append(last_page)
# 尾部添加标签
page_html_list.append('''
</nav>
</ul>
''')
return ''.join(page_html_list)

视图层使用

from app01.utils.mypage import Pagination
def boot_list(request):
book_list = models.Book.objects.all()
# 自定义分页器的使用
current_page = request.GET.get('page',1)
all_count = book_list.count()
page_obj = Pagination(current_page=current_page,
all_count=all_count,
per_page_num=15,
pager_count=11)
# 参数说明:
# current_page 当前的页数
# all_count 所有的页数
# per_page_num 每页显示多少
# pager_count 分页器显示的条数
page_queryset = book_list[page_obj.start:page_obj.end]
return render(request,'book_list.html',locals())

模板层使用

在对书的列表循环取值的时候,换掉循环的对象:

{% for book_obj in page_queryset %}
<!--将页面上原本的book_list对象全部换成切片之后的queryset即可-->

然后,在表格标签下面需要加分页功能的地方加上即可。

{{ page_obj.page_html|safe }}

最新文章

  1. 为Xamarin更好的开发而改写的库
  2. listbox 多选删除(找了好多都不行,终于让我写出来了)
  3. jquery checkbox实例
  4. 从零开始学IOS开发
  5. JAVA缓存技术
  6. bzoj2743 [HEOI2012]采花
  7. 在linux中搭建git服务器
  8. drivers/mfd/Mfd-core.c
  9. pull解析xml文件
  10. 一起学JUCE之HashMap
  11. UVa 900 - Brick Wall Patterns
  12. Xshell利用登录脚本从服务器登录到另外一个服务器
  13. 2017第八届蓝桥杯 K倍区间
  14. NextCloud前端支持播放mov文件
  15. 产品炼成记&#183;hostingranking.cn&#183;基于ghost的轻量技术架构整理
  16. CentOS 7.6下解决登录MySQL时,ERROR 1045 (28000): Access denied for user root@localhost (using password: YES
  17. vim 多行添加注释,取消注释
  18. ef codefirst 模型字段类型与sqlserver表字段类型对应概要
  19. Wood Chipping Text Animation
  20. C# HttpClient请求Webapi帮助类

热门文章

  1. [转]设置修改CentOS系统时区
  2. CentOS7 相关配置
  3. Redhat 7.0 安装桌面环境
  4. Mysql 插入数据,随机事件选择
  5. 《转》python学习基础
  6. scrapy的使用-scrapy shell
  7. mySql搜索引擎
  8. 云HBase备份恢复,为云HBase数据安全保驾护航
  9. System.Web.Mvc.HttpGetAttribute.cs
  10. 标记excel中输入的重复数据