Django分页器的设置

有时候在页面中数据有多条时很显然需要进行分页显示,那么在python中django可以这样设置一个分页处理

怎么样去设置呢?

我们要用到  Django  中的  Paginator  组件

后台代码及解析

from django.core.paginator import Paginator  # 导入该组件

def show_book(request):
title = '图书详情'
header = '图书管理系统'
book_list = Book.objects.all()
paginator = Paginator(book_list, 8) # 将返回前台展示数据进行Paginator操作,一页显示8条记录 count = paginator.count # 对象总个数
print(count) sum_pages = paginator.num_pages # 总分页数 page_range = paginator.page_range # 页码列表(可迭代对象) 也就是可以被循环

# 获取第一页
# 请求链接错误,默认用第一页 主要是防止get请求时候直接写/show_book/?page= 非法字符
try:
current_num = int(request.GET.get('page', 1)) # type: str => int
except:
current_num = 1 # 不在页面范围内的安全处理 主要是防止get请求时候直接写/show_book/?page=超过总分页数或者小于0
if current_num < 1:
current_num = 1
return redirect('/show_book/?page=%s' % current_num)
elif current_num > sum_pages:
current_num = sum_pages
return redirect('/show_book/?page=%s' % current_num) current_page = paginator.page(current_num) # 当前的页面
print('>>>', current_page) # 通过page_range控制页数版面,我设置的是中间显示3个标签和前后两页,其他的用...标识,以下为控制逻辑
if current_num < 4:
page_range = range(2, 5)
elif current_num > sum_pages - 3:
page_range = range(sum_pages - 3, sum_pages)
else:
page_range = range(current_num - 1, current_num + 2)
return render(request, 'show_book.html', locals())

前台代码解析

{% extends 'base.html' %}   # 继承母版


{% block list %}
<div class="list-group">
<a href="{% url 'show_book' %}" class="list-group-item active">
<h4>图书列表</h4>
</a>
<a href="{% url 'show_author' %}" class="list-group-item">
<h4>作者列表</h4>
</a>
<a href="{% url 'show_publish' %}" class="list-group-item">
<h4>出版社列表</h4>
</a>
</div>
{% endblock %}

{% block table %}
<div class="clearfix">
<a href="{% url 'add_book' %}" class="btn btn-primary pull-right">新增图书</a>
</div>
<table class="table" style="margin-top: 10px">
<tr>
<th>编号</th>
<th>书名</th>
<th>价格</th>
<th>出版日期</th>
<th>出版社</th>
<th>作者</th>
<th>编辑</th>
<th>删除</th>
</tr>
{% for book in current_page %} # 这里要设置为当前的页面对象,和后台对应
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ book.name }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish_date|date:'Y年m月d日' }}</td>
<td>{{ book.publish.name }}</td>
<td>
{% for author in book.author.all %}
{{ author.name }}
{% if not forloop.last %}
|
{% endif %}
{% endfor %}
</td>
<td>
<a href="{% url 'update_book' %}?id={{ book.id }}">编辑</a>
</td>
<td> <a onclick="delete_action({{ book.id }})" class="delete-confirm" href="javascript:void(0)">删除</a>
</td>
</tr>
{% endfor %}
</table>
<!-- 分页器 --> # 用jQuery和bootstrap实现
<nav aria-label="Page navigation">
<ul class="pagination">
{# 如果只有一页则不需要上一页和下一页标识#}
<!-- 上一页 --> # 设置上一页的按钮
<li>
{% if current_num > 1 %} # 只有页面大于1才会有效果,否则不能点击
<a href="{% url 'show_book' %}?page={{ current_num|add:-1 }}" aria-label="Previous">
{% else %}
<a href="javascript:void(0)" aria-label="Previous">
{% endif %}
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<!-- 第一页页码 --> # 设置第一页显示的按钮
{% if current_num == 1 %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page=1">1</a></li>
{# 只有一页就不需要...和中间三页了#}
{% if current_num > 3 %} # 如果页面小于3页就不需要...进行分隔
<li><a href="javascript:void(0)">...</a></li>
{% endif %}
<!-- 中间三页页码 --> # 设置中间三页的代码
{% for num in page_range %}
{% if current_num == num %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page={{ num }}">{{ num }}</a></li>
{% endfor %}

{% if current_num < sum_pages|add:-3 %} # 如果点击到最后三页就没必要显示...
<li><a href="javascript:void(0)">...</a></li>
{% endif %}
<!-- 最后一页页码 --> # 设置最后一页的显示按钮
{% if current_num > 1 %}
{% if current_num == sum_pages %}
<li class="active">
{% else %}
<li>
{% endif %}
<a href="{% url 'show_book' %}?page={{ sum_pages }}">{{ sum_pages }}</a></li>
{% endif %}

<!-- 下一页 --> # 设置下一页的按钮
<li>
{% if current_num < sum_pages %}
<a href="{% url 'show_book' %}?page={{ current_num|add:1 }}" aria-label="Next">
{% else %}
<a href="javascript:void(0)" aria-label="Next">
{% endif %}
<span aria-hidden="true">&raquo;</span>
</a>
</li>
</ul>
</nav>

Django分页器的设置的更多相关文章

  1. Django - Cookie、Session、自定义分页和Django分页器

    2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...

  2. Django 分页器 缓存 信号 序列化

    阅读目录 分页器 缓存 信号 序列化 Django分页器  (paginator) 导入 from django.core.paginator import Paginator, EmptyPage, ...

  3. Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt)

    Django 1.6 最佳实践: 如何设置django项目的设置(settings.py)和部署文件(requirements.txt) 作者: Desmond Chen,发布日期: 2014-05- ...

  4. Django 分页器的使用

    Django 分页器的使用 Django作为Python Web开发框架的一哥,提供了企业级网站开发所需要的几乎所有功能,其中就包括自带分页功能.利用Django自带的Paginator类,我们可以很 ...

  5. Django分页器和自定义分页器

    一.自定义分页器 import copy class Pagination(): def __init__(self,request,current_page,all_data_num,each_pa ...

  6. django -----分页器组件

    分页器组件 本文目录 1 Django的分页器(paginator)简介 2 应用View层 3 模版层 index.html 4 扩展 回到目录 1 Django的分页器(paginator)简介 ...

  7. django的mysql设置和mysql服务器闲置时间设置

    服务器启动后,每个进程都会主动连接到mysql,要是长时间没有数据交互,mysql会自动断开连接. show variables like  '%timeout%'; 闲置连接的超时时间由wait_t ...

  8. Django 2.0 学习(19):Django 分页器

    Django 分页器 要使用Django实现分页功能,必须从Django中导入Paginator模块(painator - 分页器) views.py from django.shortcuts im ...

  9. django日志的设置

    关于django的日志设置详细可以看下官方文档:https://yiyibooks.cn/xx/Django_1.11.6/topics/logging.html 示例: # 日志文件配置 LOGGI ...

随机推荐

  1. C++——STL内存清除

    1.vector元素的清除 看代码.在vector中添加若干元素,然后clear() #include<iostream> #include<list> #include< ...

  2. Python PIL 图像缩小、拼接

    比较各种不同取样方式的图像缩放效果. [NEAREST, BILINEAR, BICUBIC, LANCZOS, BOX, HAMMING]NEAREST取样方式是效果最差的,PIL.Image.re ...

  3. 【转】Linux环境进程间通信(五) 共享内存(上)

    转自:https://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以 ...

  4. 当鼠标经过表格数据行时颜色不同且奇偶行颜色也不同 (纯CSS)

    <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...

  5. Oracle数据csv导入

    打开工具,在tool下面有个Text Importer 先选择Data from textfile选项卡 然后选择 Open data file ,打开要导入的文件 1\ 2\ 再先选择Data to ...

  6. 使用powerpoint的表对象

    以下为basic范例,delphi使用需要加以修改 Table 对象 代表幻灯片上的表格形状.Table 对象是 Shapes 集合的成员.Table 对象包含 Columns 集合和 Rows 集合 ...

  7. kong api可视化管理工具konga安装

    说明:官网推荐: kong-dashboard,但对比界面高端程度和友好度,更推荐konga.[一个坑]kong版本问题:我在安装时目前kong最新版本已经到1.0.0, 对于konga和kong-d ...

  8. 利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)

    利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版) CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JS ...

  9. JAVA的DES加密解密在windows上测试一切正常,在linux上异常

    windows上加解密正常,linux上加密正常,解密时发生 如下异常,异常信息如下: [ERROR] 2018-10-15 09:30:35,998 method:com.iscas.ippc.co ...

  10. iOS移动开发CoreDate讲解

    ----欢迎------- 在移动端开发,数据持久化保存是基本要素,没钱在2014年之后退出了coredate,本持久化基于oc作为开发,方便程序人员操作.与SQL数据库,MySQL相比,优点颇多. ...