分页代码pagination.py如文件:

from django.utils.safestring import mark_safe
from django.http.request import QueryDict class Pagination:
"""
page: 当前的页码数
all_count: 总的数据量
per_num : 每页显示的数据量
max_show: 最多显示的页码数
""" def __init__(self, page, all_count, params=None, per_num=, max_show=):
try:
self.page = int(page)
if self.page <= :
self.page =
except Exception:
self.page =
# 查询条件
self.params = params
if not self.params:
self.params = QueryDict(mutable=True)
# 总的数据量
all_count = all_count
# 每页显示的数据量 # 总的页码数
total_num, more = divmod(all_count, per_num)
if more:
total_num +=
# 最大显示的页码数
half_show = max_show // if total_num <= max_show:
page_start =
page_end = total_num
else:
if self.page - half_show <= :
# 页码的起始值
page_start =
# 页码的终止值
page_end = max_show
elif self.page + half_show > total_num:
page_end = total_num
page_start = total_num - max_show + else:
# 页码的起始值
page_start = self.page - half_show
# 页码的终止值
page_end = self.page + half_show self.page_start = page_start
self.page_end = page_end
self.total_num = total_num
self.start = (self.page - ) * per_num
self.end = self.page * per_num @property
def page_html(self):
li_list = [] if self.page == :
li_list.append(
'<li class="disabled"><a aria-label="Previous"> <span aria-hidden="true">&laquo;</span></a></li>')
else:
self.params['page'] = self.page - # { query: ,page : }
li_list.append(
'<li><a href="?{}" aria-label="Previous"> <span aria-hidden="true">&laquo;</span></a></li>'.format(
self.params.urlencode())) # ?query=&page= for i in range(self.page_start, self.page_end + ):
self.params['page'] = i # { query: ,page : i}
if i == self.page:
li_list.append('<li class="active"><a href="?{}">{}</a></li>'.format(self.params.urlencode(), i))
else:
li_list.append('<li><a href="?{}">{}</a></li>'.format(self.params.urlencode(), i)) if self.page == self.total_num:
li_list.append(
'<li ><a aria-label="Next"> <span aria-hidden="true">&raquo;</span></a></li>')
else:
self.params['page'] = self.page +
li_list.append(
'<li ><a href="?{}" aria-label="Next"> <span aria-hidden="true">&raquo;</span></a></li>'.format(
self.params.urlencode())) return mark_safe(''.join(li_list))

使用需导入

<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7-dist/css/bootstrap.css' %}">

添加bootstrap的ul样式

  <nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
{{ page_html }} #使用分页代码
<li>
<a href="#" aria-label="Next">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>

上面的还没有记住查询条件 ,因为使用的是post请求,改成get请求。

由POST获取搜索框内容改成由GET里获取。并且判断没有获取到那么就是返回首页。es限制只能查出10条数据,我们这里在query同级上加 ‘size’:大小   ,这样就可以显示多个了

实例化page,数据是列表变成以下切片,然后传页面

页面代码使用上面已经写了。这样点击其它页面就能使用前面拼接的内容了

最新文章

  1. JSTL的if-else表式
  2. [转载]我们可以用SharePoint做什么
  3. 双系统如何删除Linux,恢复Windows从MBR引导启动?
  4. 典型重构3 (Try/Catch)
  5. hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
  6. div之间有间隙以及img和div之间有间隙的原因及解决方法
  7. springmvc xml 空模板
  8. JavaScript省市联动
  9. jquery选择指定元素之外的所有元素
  10. MS Chart 学习心得
  11. android 图片尺寸 资料
  12. php环境搭建和第一个php程序
  13. Python 爬取猫眼电影最受期待榜
  14. 038_nginx backlog配置
  15. NLTK——常用函数
  16. Python第9天
  17. TCP连接笔记
  18. Vue Admin - 基于 Vue &amp; Bulma 后台管理面板
  19. python三大框架之一flask应用
  20. 非常不错的一个JS分页效果代码

热门文章

  1. bladex-boot推送harbor出错
  2. ubuntu16.04+cuda8.0+cudnn6.0安装mxnet(极简!+成功!)
  3. EF Core 多个DbContext迁移命令
  4. [Mobi] 移动端应用技术选型的思考, Native, Flutter, Quasar, React Native
  5. python安装 错误 “User installations are disabled via policy on the machine”
  6. springboot2 设置系统访问的默认首页
  7. Emiya 家今天的饭
  8. LeetCode 912. 排序数组(Sort an Array) 43
  9. [转帖]浅谈分布式一致性与CAP/BASE/ACID理论
  10. spring data jpa碰到的坑