Django之分页
需要知道:每页多少条数据、一共多少条数据、一共需要多少页、每页从哪开始到哪结束
注意问题:1、用户输入页码为非数字。 2、用户输入页码超出页码范围
def books(request):
try: #防止用户直接输入非数字
page = int(request.GET.get("page")) #第几页
except:
page = 1
total_num = Books.objects.all().count() #一共多少条数据
per_page = 10 #每页多少条数据
total_page,m = divmod(total_num,per_page) #一共多少页
if m:
total_page+=1
if page>total_page:
page = total_page
start_page = (page-1)*10 #每页从那开始
end_page = page*10 #每页从哪结束
books = Books.objects.all()[start_page:end_page]
show_pages = 5 #显示多少个页码
half_show_pages = show_pages//2
if page < 1+half_show_pages:
show_start_page = 1
show_end_page = show_pages
elif page > total_page-half_show_pages:
show_start_page = total_page-half_show_pages*2
show_end_page = total_page
else:
show_start_page = page - half_show_pages
show_end_page = page + half_show_pages
page_list = []
for i in range(show_start_page,show_end_page+1):
if i==page:
temp = '<li class="active"><a href="/books/?page={0}">{0}</a></li>'.format(i)
else:
temp = '<li><a href="/books/?page={0}">{0}</a></li>'.format(i)
page_list.append(temp)
pre_page = page-1
next_page = page+1
return render(request,"books.html",locals())
<div class="box">
<table class="table">
<thead>
<tr>
<th>序号</th>
<th>书名</th>
</tr>
</thead>
<tbody>
{% for item in books %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
{% if page == 1 %}
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
{% else %}
<a href="?page={{ pre_page }}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
{% endif %}
</li>
<li><a href="/books/?page=1">首页</a></li>
{% for item in page_list %}
{{ item|safe }}
{% endfor %}
<li><a href="?page={{ total_page }}">尾页</a></li>
<li>
{% if page == total_page %}
<a href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
{% else %}
<a href="?page={{ next_page }}" aria-label="Previous">
<span aria-hidden="true">»</span>
</a>
{% endif %}
</li>
</ul>
</nav>
</div>
<script src="/static/jquery.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>
Django之分页的更多相关文章
- 第二十一章 Django的分页与cookie
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lan ...
- Python Django的分页,Form验证,中间件
本节内容 Django的分页 Form 中间件 1 Django 分页 1.1 Django自带的分页 1.首先来看下我的测试数据环境 ############ models.py ######### ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Django自定义分页并保存搜索条件
Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...
- Django DRF 分页
Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...
- django之分页,纯python代码
Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...
- django之分页、cookie装饰器
一.分页代码如下 from django.utils.safestring import mark_safe class Page: def __init__(self, current_page, ...
- django的分页--不全也未实现
一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输 ...
- Django自定义分页、bottle、Flask
一.使用django实现之定义分页 1.自定义分页在django模板语言中,通过a标签实现; 2.前段a标签使用<a href="/user_list/?page=1"> ...
随机推荐
- MongoDB 创建基础索引、组合索引、唯一索引以及优化
一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...
- Nero8刻录引导系统光盘镜像图文教程
刻录可引导的Windows系统光盘一直是电脑使用者较为需要的,今天,倡萌抽空写了这篇图文教程,希望对于菜鸟级的朋友有所帮助,大虾请飘过.本教程以最为强大的刻录软件Nero 8做为工具(其他版本的Ner ...
- Error:Execution failed for task ':app:processDebugManifest'. Manifest merger failed with multiple errors, see logs
这个异常在网上一搜会出现很多答案,也可能都对. 我都尝试过但是不符合我这边的要求,问题得不到解决.网上的说法是对的,jar包冲突.不过究竟是哪里冲突没办法判断. 最后尝试了一下在module的中没用的 ...
- Spring Cloud:统一异常处理
在启动应用时会发现在控制台打印的日志中出现了两个路径为 {[/error]} 的访问地址,当系统中发送异常错误时,Spring Boot 会根据请求方式分别跳转到以 JSON 格式或以界面显示的 /e ...
- top 自动执行的shell脚本中,使用top -n 1 > log.txt, 上电自动执行,文件无输出
. 自动执行的shell脚本中,使用top -n > log.txt, 上电自动执行,文件无输出,使用一下命令解决: //usr/bin/top -d -n -b > log.txt 如果 ...
- 极光推送JAVA代码示例
一. 准备工作 1. 登录极光推送官网https://www.jpush.cn/,注册账号并登录 2. 创建应用 创建应用过程,详见百度经验:http://jingyan.baidu.com/arti ...
- Laravel 和 Spring Boot 两个框架比较创业篇(二:人工成本)
前面从开发效率比较了 Laravel 和 Spring Boot两个框架,见:Laravel 和 Spring Boot 两个框架比较创业篇(一:开发效率) ,这一篇打算比较一下人工成本. 本文说的人 ...
- 使用 xUnit 编写 ASP.NET Core 单元测试
还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP ...
- python list 中 remove 的骚操作/易错点
在过去的某一天(2019.3.19),有个学弟问了一个关于python list中的一个问题: 比如我们已知一个列表 [3,4,5,6,5,4,3] 我们想删除第一个为3的元素. 我们尝试了如下几种方 ...
- 在Asp.Net Core中使用DI的方式使用Hangfire构建后台执行脚本
最近项目中需要用到后台Job,原有在Windows中我们会使用命令行程序结合计划任务或者直接生成Windows Service,现在.Net Core跨平台了,虽然Linux下也有计划任务,但跟原有方 ...