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 如果结束 ...
随机推荐
- Confluence 6 配置管理员会话安全的备注
禁用密码确定. Confluence 安装使用自定义授权机制有可能会在密码校验的时候遇到问题.如果必要的话,你可以设置 password.confirmation.disabled 系统属性来禁用密码 ...
- Confluence 6 用户宏示例 - Formatted Panel
下面的用演示了如果还写一个用户宏,并在这个宏中创建一个格式化的面板,并且指定颜色.将会创建下面的面板: (Title) 注意:这个面板的标题为空,如果你没有给这个面板标题参数的话. Macro n ...
- SpringBoot捕获全局异常
1.创建GloableExceptionAop类捕获全局异常 package com.cppdy.exception; import org.springframework.web.bind.anno ...
- vi 编辑器常用快捷键
vi 编辑器 vim 编辑器算是vi的进阶版本 所有的unix like 系统都会内建vi编辑器 vi三种模式分别为: 1.一般模式(默认模式或指令模式) 上下左右方向键 移动光标 pageUp pa ...
- SQLmap注入启发式检测算法
1.经过setTargetEnv()就进入了checkWaf()的环节 def checkWaf(): """ Reference: http://sec ...
- Linux编程学习笔记(二)
续上个章节,这个章节主要是Linux的远程登录系统操作笔记 一. Linux一般作为服务器使用,但是服务器都是在机房的,所以不可能经常跑到机房去操作系统,所以使用远程登录系统,在Linux的系统一般使 ...
- Git使用二:git与svn的区别与工作流程
svn记录的是每一次版本变动的内容,三角形代表改动的内容 git是将每个版本独立保存 git的三棵树:工作区域.暂存区域.git仓库 工作目录:平时存放项目的地方暂存区域:临时存放改动,即将提交到仓库 ...
- Vue-CLI 3.x 设置反向代理
最近在项目中使用了Vue CLI 3.0版本,项目中需要设置反向代理解决跨域问题,下面记录一下设置过程. 新建配置文件 (vue-cli3.x 官网的配置文档 https://cli.vuejs.or ...
- Django将默认的SQLite更换为MySQL
1.注释默认的SQLite3配置: blogproject/settings.py ''' DATABASES = { 'default': { 'ENGINE': 'django.db.backen ...
- easyui 布局之window和panel一起使用时,拉动window宽高时panel不跟随一起变化
项目开发中布局是每一个组件都由最外层的window和内部的至少一个panel组成,其他的细小组件再依次放到panel中. 问题:当拉动外部的window时我们希望内部的panel的宽高也跟着变化,但是 ...