Django分页(二)

要求

# 、设定每页显示数据条数
#
# 、用户输入页码(第一页、第二页...)
#
# 、设定显示多少页号
#
# 、获取当前数据总条数
#
# 、根据设定显示多少页号和数据总条数计算出,总页数
#
# 、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置
#
# 、在数据表中根据起始位置取值,页面上输出数据
#
# 、输出分页html,如:[上一页][][][][][][下一页]

具体实现效果

css样式可以自行修改

示例

页面具体处理

# 参数:
#数据总个数
#当前页
#每页显示多少条数据
#最多每页多个页号 class PageInfo(object):
def __init__(self,totalCount,current,totalItem=12,peritems=10):
#数据总个数
self._count=totalCount
#当前页
try: v=int(current)
if v<=0:
v=1
self.__current=v
except Exception as e:
self.__current = 1
#每页显示的行数
self.__totalItem=totalItem
#最多显示页面
self.__peritems = peritems #设置一页数据的开始和结束
#数据开始的页数
def start(self):
return (self.__current-1)*self.__totalItem
#数据结束的页数
def end(self):
return self.__current*self.__totalItem #求出总页数
@property
def num_pages(self): a,b=divmod(self._count,self.__totalItem)
# print(a,b)
if b==0:
return a
return a+1 #生成所有的页号
def page_num_range(self):
# 当前页面
# self.current_page
# 总页数
# self.num_pages
# 最多显示的页码个数
# self.max_pager_num
if self.num_pages < self.__peritems:
return range(1, self.num_pages + 1)
part = int( self.__peritems/ 2)
if self.__current - part < 1:
return range(1, self.__peritems + 1)
if self.__current + part > self.num_pages:
return range(self.num_pages + 1 - self.__peritems, self.num_pages + 1)
return range(self.__current - part, self.__current + part + 1)
#所有的a标签
def page_str(self): #用来存放所有页号a标签
page_list=[] #首页
head_page="<a href='/index3?p=1'>首页</a>"
page_list.append(head_page) #上一页
print(self.__current)
if self.__current ==1: prev="<a href='#'><<</a>"
else:
prev="<a href='/index3?p=%s'><<</a>"%(self.__current-1) page_list.append(prev)
for i in self.page_num_range():
if i==self.__current:
temp="<a style='font-size:30px;' href='/index3?p=%s'>%s</a>"%(i,i)
else:
temp="<a href='/index3?p=%s'>%s</a>"%(i,i)
page_list.append(temp) #下一页
if self.__current==self.num_pages:
next = "<a href='#'>>></a>"
else:
next = "<a href='/index3?p=%s'>>></a>" % (self.__current + 1) page_list.append(next) # 尾页
b_page="<a href='/index3?p=%s'>尾页</a>"%( self.num_pages)
page_list.append(b_page)
return ''.join(page_list)

视图函数

from django.shortcuts import render,HttpResponse,redirect
from blog.models import *
from blog import pager
# Create your views here.
USER_LIST=[]
for i in range(666):
temp={'name':'root'+str(i),'age':i}
USER_LIST.append(temp) def get_index3(request):
current_page=request.GET.get('p') #初始化页面处理的对象,有两个参数在初始化函数里,设置了默认数值
page_obj=pager.PageInfo(666,current_page) #对数据进行切片
data_list=USER_LIST[page_obj.start():page_obj.end()] return render(request,"index3.html",{'data_list':data_list,"page_obj":page_obj})

HTML

注意:safe在这里的作用。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
a{
border-style: solid ;
} </style>
</head>
<body>
<div class="header">
<div>
{% for user in data_list %}
<li>{{ user.name }} {{ user.age }} </li>
{% endfor %}
<br>
{{ page_obj.page_str | safe }}
</div> </div>
</body>
</html>

Django分页(二)的更多相关文章

  1. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  2. Django分页类的封装

    Django分页类的封装 Django ORM  封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...

  3. Django分页的实现

    Django分页的实现 Django ORM  分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...

  4. Django 分页查询并返回jsons数据,中文乱码解决方法

    Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...

  5. 【python】-- Django 分页 、cookie、Session、CSRF

    Django  分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...

  6. Django框架(十四)—— Django分页组件

    目录 Django分页组件 一.分页器 二.分页器的使用 三.案例 1.模板层 2.视图层 Django分页组件 一.分页器 数据量大的话,可以分页获取,查看 例如:图书管理中,如果有成千上万本书,要 ...

  7. day 65 Django基础之django分页

      Django基础之django分页   一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...

  8. day 61 Django基础之django分页

      Django基础之django分页 一.Django的内置分页器(paginator) view   from django.shortcuts import render,HttpRespons ...

  9. django 分页(2) 使用类 页码显示

    django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...

随机推荐

  1. Centos7 linux 卸载自带安装的jdk 并yum自动安装jdk1.8

    一:卸载系统自带安装的JDK 注:本文参考了< 使用CentOS7卸载自带jdk安装自己的JDK1.8> 通过xshell工具成功连接安装好的虚拟机之后可通过    rpm -qa | g ...

  2. xilinx_all_version.lic

    INCREMENT ISE_Vivado_Seth xilinxd -dec- uncounted \ C25FB036D304 VENDOR_STRING=License_Type:Bought H ...

  3. STL的注意事项

    template是一个泛化的:使用template时开始仅仅是声明,具体的例如:k<int> a;叫做实例化显式实例化:类似k<int>a:明确指出哪种类型:隐式实例化:类似k ...

  4. 【深度学习】吴恩达网易公开课练习(class1 week2)

    知识点汇总 作业内容:用logistic回归对猫进行分类 numpy知识点: 查看矩阵维度: x.shape 初始化0矩阵: np.zeros((dim1, dim2)) 去掉矩阵中大小是1的维度: ...

  5. 【kafka】设置指定topic和group_id消耗的offset

    该博文方法有问题,正确方案在http://www.cnblogs.com/dplearning/p/7992994.html 背景: 搭建了一个kafka集群,建立了topic test,用group ...

  6. ubuntu MySQL配置文件

    查看配置文件: locate my.cnf 查看配置文件路径: /记得要在配置环境变量后执行下列命令 which mysqld /usr/local/mysql/bin/mysqld --verbos ...

  7. mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,

      在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...

  8. 类和JSP关系

    404的原因.除了路径问题,还有文件放置位置.比如如果文件在web-inf下面.浏览器是访问不到的

  9. Tensorflow生成唐诗和歌词(下)

    整个工程使用的是Windows版pyCharm和tensorflow. 源码地址:https://github.com/Irvinglove/tensorflow_poems/tree/master ...

  10. EF Core Migration

    //添加migrations dotnet ef migrations add [名称] //根据model更新sql表结构 dotnet ef database update //删除最新的migr ...