python/Djangof分页与自定义分页
python/Djangof分页与自定义分页
Django分页
##============================================分页=======================================================
# current_pagc = request.GET.get('page')
# from django.core.paginator import Paginator,Page
# # result = models.UserInfo.objects.all().count()
# result = models.UserInfo.objects.all()
# paginator=Paginator(result,10)
# try:
# posts=paginator.page(current_pagc)
# except Exception as c:
# posts = paginator.page(1)
# return render(request,'geting.html',{'posts':posts})
##============================================django自定义分页不能对页数进行限定============================ # class PageInfo(object):
#
# def __init__(self,current_page,per_page,all_count,show_page=11):
# try:
# self.current_page = int(current_page)
# except Exception as e:
# self.current_page=1
# self.per_page=per_page
# self.all_count=all_count
# a,b =divmod(all_count,per_page)
# if b:
# a = a+1
# self.all_pager = a
# self.show_page=show_page
#
# def start(self):
# return (self.current_page -1)* self.per_page
#
# def end(self):
# return self.current_page * self.per_page
#
# def pager(self):
# # v='<a href="/custom.html?page=1">1</a>'
# # return v
# page_list=[]
# half=(self.show_page-1)/2
# begin=self.current_page - half
# stop=self.current_page +half +1
# for i in range(int(begin),int(stop)):
# if self.current_page == i:
# temp="<a style='display:inline-block;padding:5px;margin:5px;background-color:red' href='/custom.html?page=%s'>%s</a>"%(i,i,)
# else:
# temp = "<a style='display:inline-block;padding:5px;margin:5px;' href='/custom.html?page=%s'>%s</a>" % (
# i, i,)
# page_list.append(temp)
#
# return ''.join(page_list)
# def custom(request):
# #表示用户当前想要访问的页码
# all_count = models.UserInfo.objects.all().count()
# #每页显示的个数
# page_info=PageInfo(request.GET.get('page'),10,all_count)
# user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
# return render(request,'custom.html',{'user_list':user_list,'page_info':page_info})
自定义Django分页
from django.core.paginator import Paginator,Page
class PageInfo(object): def __init__(self,current_page,per_page,all_count,show_page=11):
##类的变量参数
try:
#捕捉异常
self.current_page = int(current_page)
#如果能正常转换成整型就赋值给self.current_page
except Exception as e:
#不能正常转换成整型就赋值成数字1
self.current_page=1
#设置多少条数据分为一个一页
self.per_page=per_page
#获取数据库中所有的数据能分为多少页
self.all_count=all_count
#进行分页计算(数据库总数/多少天数据进行分页)能除开等到结果就像是(12,0)把12赋值给a,把0赋值给b
a,b =divmod(all_count,per_page)
#如果b为真
if b:
#a 等于a+1
a = a+1
#求出总共要分的页数赋值给self.all_pager
self.all_pager = a
#把传入的show_page值赋值给self.show_page
self.show_page=show_page def start(self):
#定义函数 设定起始位
return (self.current_page -1)* self.per_page
#返回当前页数减1 乘每页多少数据
def end(self):
# 定义函数 设定停止位
return self.current_page * self.per_page
# 返回当前页数减乘每页多少数据
def pager(self):
#定义函数
# v='<a href="/custom.html?page=1">1</a>'
# return v
page_list=[]
#创建列表
half=(self.show_page-1)/2
#获取页码的中间值
if self.all_pager < self.show_page:
#如果数据库的数小于设定的页码数
begin=1
#起始位设定为1
stop=self.all_pager+1
#停止为设定为数据库的数加上1(因为切片是顾头不顾尾)
else:
#否则
if self.current_page <= half:
#如果当前页码小于等于页码中间值
begin=1
#起始位设定为1
stop=self.show_page+1
#停止位设定为页码数加1(因为切片是顾头不顾尾)
else:
#否则
if self.current_page + half > self.all_pager:
#如果当前页码加上中间的页码大于数据库的总页码数
begin=self.all_pager-10
#起始值设定为数据库总数减10
stop=self.all_pager+1
#停止值设定为数据库总数加1(因为切片是顾头不顾尾)
else:
#否则
begin=self.current_page-half
#起始位设定为当前页码减中间页码
stop=self.current_page+half+1
#停止位设定为当前页码加中间页码加1(因为切片是顾头不顾尾)
if self.current_page==self.all_pager:
up = "<li><a href='#'>下一页</a></li>"
else:
up = "<li><a href='/custom.html?page=%s'>下一页</a></li>" % (self.current_page+1)
page_list.append(up)
for i in range(int(begin),int(stop)):
#进行循环范围是(起始位,停止位)
if self.current_page == i:
#如果当前页码等于循环的i时
temp="<li class='active'><a href='/custom.html?page=%s'>%s</a></li>"%(i,i,)
#自定义一个a标签设置简单样式 并添加背景颜色作为当前页码标识
else:
#否则
temp = "<li><a href='/custom.html?page=%s'>%s</a></li>" % (
i, i,)
#自定义一个a标签设置简单样式
page_list.append(temp)
#把每循环的a标签都添加到page_list列表中
if self.current_page==1:
nex = "<li><a href='#'>上一页</a></li>"
else:
nex = "<li><a href='/custom.html?page=%s'>上一页</a></li>" % (self.current_page-1)
page_list.append(nex)
return ''.join(page_list)
#把列摆中的内容进行拼接(因为返回的是字符串)
# def custom(request):
# #从数据库中获取所有数据
# all_count = models.UserInfo.objects.all().count()
# #实例化一个对象并进行传值
# page_info=PageInfo(request.GET.get('page'),10,all_count)
# #从数据库中获取数据设置起始和结束位置
# user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()]
# #返回到HTML标签中并传入参数
# return render(request,'custom.html',{'user_list':user_list,'page_info':page_info}) ##==================================================总结=================================================================
'''
1.获取到数据中最大的页码数
2.设定一页显示多少数据
3.在用数据库总数除以要显示的内容数量(如果余数不等于零需要多添加一页)
4.设定一页中显示多少页码按钮
5.获取一页页码中中间的页码数
6.判断数据库的页码是不是小于设定一页中显示页码按钮的数(如果小于就重写停止值,不小于就往下判断)
7.判断当前页码数小于等于设定页码的中间值(重写起始值为1)
8.当前页码值不小于等于页码的中间值(重写起始值为中间值-5,结束值+6,因为切片是顾头不顾尾)
9.判断当前页码加上中间页码数是不是大于数据库总数(大于重写起始值为数据库总数-10,结束值为数据库总数+1,因为切片是顾头不顾尾)
10.通过python向HTML页面中传一个函数名,在HTML中函数名.方法执行(不能加括号执行)
11.|safe 表明是安全参数可以正常渲染
12.判断当前页码数是不是等于1(如果等于1不执行上一步按钮)
13.判断当前页码数是不是等于数据库总数(如果等于不执行下一步按钮)
'''
python/Djangof分页与自定义分页的更多相关文章
- MVC下分页的自定义分页一种实现
1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...
- Djang内置分页和自定义分页
内置分页 views from django.core.paginator import Paginator,Page,PageNotAnInteger def DJs_pages(request): ...
- Django 分页 以及自定义分页
Django提供了一个新的类来帮助你管理分页数据,这个类存放在django/core/paginator.py.它可以接收列表.元组或其它可迭代的对象. 基本语法 1 2 3 4 5 6 7 8 9 ...
- Python之路Day21-自定义分页和cookie
本节知识点概要 1.URL 2.views - 请求其他信息 - 装饰器 3.Templates - 母版 - 自定义 4.Models操作 5.分页(自定义分页) 6.cookie 7.sessio ...
- Django - Cookie、Session、自定义分页和Django分页器
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...
- Django—自定义分页
分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置. 确定分页需求: 1. 每页显示的数据条数 2. 每页显示页号链接数 3. 上一页 ...
- Python之路【第十九篇】自定义分页实现(模块化)
自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- Python自定义分页组件
为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...
随机推荐
- Cannot resolve taglib with uri http://java.sun.com/jsp/jstl/core
问题 <Spring 实战>第5章,在 IDEA 中 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" pre ...
- 关于MD5+salt盐加密
MD5+salt 最近浏览浏览一些帖子时,发现曾经引以为傲的md5加密算法,虽然是无法解密的算法,但是现在可以通过FELHELP(谷歌浏览器插件)或者一些字典可以套出来,.但是当md5+salt值时, ...
- Java中为什么long能自动转换成float类型
刷题时候看到一个float和long相互转换的问题,float向long转换的时候不会报错,一个4个字节一个8个字节,通过baidu找到了答案. 下面转载自http://blog.csdn.net/s ...
- poj-3185-开关问题
描述 牛一行20他们喝的水碗.碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水).他们希望所有20个水碗那么,因此用宽鼻子翻碗. 嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两 ...
- c++ --> 重载、重写(覆盖)和隐藏的区别
重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...
- Be Better , Be Better
Be Better! 这不是一道题,只是我的flag.初三寒假,一个本应该对着计算机翻天覆雨的假期,我在鬼班撸高中课...其实感触是从初中课得来的.有些事,以前我说是我不懂,现在我不说不是我不懂.Ju ...
- python实现的txt目录树
首先,我先表述一下我的需求: 我记笔记比较乱,但我比较容易"半途而废".文件夹很多,但大都只有一两个文件.... 所以我需要一种方式,能在不逐个打开文件夹的前提下,"看到 ...
- <经验杂谈>介绍Js简单的递归排列组合
最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...
- 【WCF系列】(二)设计和实现服务协定
设计和实现服务协定 WCF术语介绍 服务(Service):服务是一个构造,它公开一个或多个终结点,其中每个终结点都公开一个或多个服务操作. 终结点(EndPoint):终结点是用来发送或接收消息(或 ...
- hibernate框架学习笔记5:缓存
缓存不止存在与程序中,电脑硬件乃至于生活中都存在缓存 目的:提高效率 比如IO流读写字节,如果没有缓存,读一字节写一字节,效率低下 hibernate中的一级缓存:提高操作数据库的效率 示例: 抽取的 ...