Django分页(二)
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分页(二)的更多相关文章
- django 分页组件
一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...
- Django分页类的封装
Django分页类的封装 Django ORM 封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...
- Django分页的实现
Django分页的实现 Django ORM 分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...
- 【python】-- Django 分页 、cookie、Session、CSRF
Django 分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...
- Django框架(十四)—— Django分页组件
目录 Django分页组件 一.分页器 二.分页器的使用 三.案例 1.模板层 2.视图层 Django分页组件 一.分页器 数据量大的话,可以分页获取,查看 例如:图书管理中,如果有成千上万本书,要 ...
- day 65 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
- day 61 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
- django 分页(2) 使用类 页码显示
django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...
随机推荐
- Java.ftp上传下载
1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- Confluence 6 管理应用服务器内存设置
应用服务器中的最小和最大 JVM Heap 空间配置将会影响系统的性能.Confluence 管理员可能希望对默认的配置进行修改,基于你系统的负载不同配置情况也会有所不同,请参考页面 Server H ...
- swift项目初始化并添加忽略文件Swift.ignore
1 先去GitHub上去把最新的忽略文件下载下载 https://github.com/github/gitignore 2 然后找到Swift.gitignore 把里面的 pod 前面的# 删除 ...
- nginx实践(四)之静态资源web服务(防盗链)
防盗链目的 防止资源被盗用 http_refer 主要是判断refer信息,判断请求来源是不是合法身份 语法 实例 参数说明: none表示允许没有代理的头信息过来,blocked表示refer信息不 ...
- flask 面试题
1,什么是Flask,有什么优点?概念解释Flask是一个Web框架,就是提供一个工具,库和技术来允许你构建一个Web应用程序.这个Web应用程序可以是一些Web页面,博客,wiki,基于Web的日里 ...
- 部署描述符 web.xml
google的部署描述符详解: https://cloud.google.com/appengine/docs/flexible/java/configuring-the-web-xml-deploy ...
- java常用实用类
1.String类概念 java程序中默认导入java.lang包的,像java.lang.String等String类属于final类,用户不能扩展String类,String 类没有子类.Stri ...
- cf1106E 线性dp+multiset
之前看错题目了,以为父亲的选择时按最大收益来的.结果并不是 /*注意题目中说只要某个时间父亲可以取得红包,他就取硬币数最多同时耗时最小的那个就是不管后续如何,不一定满足最大收益 dp[i][j]表示时 ...
- CF 1042F
玄学贪心... 题意:给出一棵树,要求将他的所有叶节点分成最少的组,且在每组中的任意两节点之间的距离不大于k 解析: 显然是个贪心啦... 稍微考虑一下贪心思想: 我们从下向上合并整棵树,在合并到某个 ...
- fdisk命令
fdisk -l命令详解 Disk /dev/sda: 53.7 GB, 53687091200 bytes 块设备名称为/dev/sda,此设备的大小为53.7GB,这个数字不是特别精确,我系统是5 ...