Django中的分页
直接看代码吧,还算比较简单:
- 先确认数据量有多少
- 根据页面显示数据的多少来分割数据,得到页面的开始数据和结束数据
- 根据开始和截止数据去切片数据,并且得到总共的页码数
- 根据一页显示多少页码和当前页码数,得到开始和截止的页码
- 配置首页码、上一页、页码内容、下一页、末页
- 内容为字符串拼凑的HTML标签,并拼接到一起
- 导入mark_safe模块,将字符串转化为页码对象
HTML页面内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>page_test</title>
<style>
.selected{
background-color: lightblue;
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>id</th>
<th>名称</th>
</tr>
</thead>
<tbody>
{% for item in data %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div>
{{ str_page }}
</div>
</body>
</html>
views.py内容:
def page(request):
# for i in range(200):
# name = 'cc'+str(i)
# models.Girl.objects.create(name=name)
current_page = request.GET.get('p', 1)
current_page = int(current_page)
start = (current_page - 1) * 10
end = current_page * 10
data = models.Girl.objects.all()[start:end]
total_item = models.Girl.objects.all().count()
a, b = divmod(total_item, 10)
if b == 0:
pass
else:
a += 1
str_page = CustomPage('?p=',current_page,a)
return render(request, 'page.html', {'data': data, 'str_page': str_page})
def CustomPage(baseurl,current_page,total_page):
#每页显示11页码
#perPage = 11
begin = 0
end = 0
if total_page <= 11:
begin = 0
end = total_page
else:
if current_page > 5:
begin = current_page - 5
end = current_page + 5
if end > total_page:
end = total_page
else:
begin = 0
end = 11
page_list = []
#编辑首页项
if current_page <= 1:
first = "<a href='#'>首页</a>"
else:
first = "<a href='%s%d'>首页</a>"%(baseurl,1)
page_list.append(first)
#编辑上一页选项
if current_page <= 1:
prev = "<a href='#'>上一页</a>"
else:
prev = "<a href='%s%d'>上一页</a>"%(baseurl,current_page-1)
page_list.append(prev)
#编辑中间页面项
for i in range(begin+1,end+1):
if i == current_page:
temp = "<a href='%s%d' class='selected'>%d</a>"%(baseurl,i,i)
else:
temp = "<a href='%s%d'>%d</a>"%(baseurl,i,i)
page_list.append(temp)
#编辑下一页选项
if current_page >= total_page:
nex = "<a href='#'>下一页</a>"
else:
nex = "<a href='%s%d'>下一页</a>"%(baseurl,current_page+1)
page_list.append(nex)
#编辑末页选项
if current_page >= total_page:
last = "<a href='#'>末页</a>"
else:
last = "<a href='%s%d'>末页</a>"%(baseurl,total_page)
page_list.append(last)
#拼接字符串
result = ' '.join(page_list)
#转换为HTML
from django.utils.safestring import mark_safe
return mark_safe(result)
Django中的分页的更多相关文章
- Django中的分页,cookies与session
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- Django 中设置分页页码,只显示当前页以及左右两页
设置后的效果如下: Django 给我们提供了分页的功能:`Paginator`和`Page`类都是用来做分页的.他们在Django中的路径为:`from django.core.paginator ...
- django中的分页管理
有时,展示的对象太多,需要对他们进行分页展示,不能一页把所有的结果都展示出来吧,那样的话,哈哈,挺逗 使用Django分页器功能 从Django中导入Paginator模块(没有的话,自行下载,我是w ...
- Django中的分页操作、form校验工具
批量插入数据 后端: def fenye(request): book_list=[] for i in range(100): book_list.append(models.Book(title= ...
- django中的分页设置
1.在控制台中的展示 from django.core.paginator import Paginator iter = 'abcdefghijklmn' inator = Paginator(it ...
- django中写分页
1.引用函数import from django.core.paginator import Paginator 2.分页 page_obj = Paginator(Article.objects.a ...
- django中的分页标签
class Pagination: def __init__(self, page, page_total, per_one_page=15, max_page=11): ''' :param pag ...
- Django中扩展Paginator实现分页
Reference:https://my.oschina.net/kelvinfang/blog/134342 Django中已经实现了很多功能,基本上只要我们需要的功能,都能够找到相应的包.要在Dj ...
- django中如何实现分页功能
1.在html页面中导入js文件和css文件 <link rel="stylesheet" href="../../../static/css/jquery.pag ...
随机推荐
- 1行代码,删除svn文件夹
引用:http://www.cnblogs.com/Alexander-Lee/archive/2010/02/23/1671905.html linux操作系统: find -name .svn | ...
- selenium验证码处理
在爬虫过程中经常遇到验证码,如何处理验证码就显得很重要 现在来说貌似没有完美的解决方案,很多都是通过第三方平台来实现验证码的验证 将获取的验证码的url发送到第三方平台,接收平台返回的验证码,貌似很简 ...
- 2015.01.15(android AsyncTask)
参考网址:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html /* * Params 启动任务执行的输入参数,比如HTT ...
- mysql中时间类型datetime,timestamp与int的区别
在mysql中存储时间,我们可以用datetime 格式,timestamp格式,也可以用int格式.那么我们设计的时候该如何考虑呢? 首先,我觉得应该明白这几个格式究竟是如何的,然后看看他们的区别, ...
- Spring的javaMail邮件发送(带附件)
项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...
- grep DEMO
测试数据: [xiluhua@vm-xiluhua][~]$ cat msn.txt aaa bbb bbb ccc ccc ddd bbb eee aaa ccc bbb sss [xiluhua@ ...
- CentOS下使用Percona XtraBackup对MySQL5.6数据库innodb和myisam的方法
Mysql卸载从下往上顺序 [root@localhost /]# rpm -e --nodeps qt-mysql-4.6.2-26.el6_4.x86_64[root@localhost /]# ...
- Android推送方案分析(MQTT/XMPP/GCM)
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1. 使用GCM服务(Google Cloud ...
- mongo 学习笔记
mysql语句 : ' ,,),(,,) mongo语句: db.}}).limit() db."}) db.}}) 条件操作符1 mongodb中的条件操作符有: (>) 大于 ...
- C#:实现接口中定义的事件
public delegate void TestDelegate(); // delegate declaration public interface ITestInterface { event ...