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. restricted 模式及其 使用

    什么是数据库的RESTRICTED 模式 注:以下内容来至:百度知道 --数据库受限模式,在这个模式下只有RESTRICTED SESSION 权限的人才可以登陆,一般用与数据库维护的时候使用. RE ...

  2. Confluence 6 识别系统属性

    Confluence 支持一些可以从 Java 系统属性中配置的配置参数和调试(debugging )设置.系统属性通常是使用 -D 为参数选项,这个选项是 Confluence 在运行后设置到 JV ...

  3. Confluence 6 CSS 指南:修改顶部背景

    Confluence 默认页面的顶部是有关站点的菜单连接,在这里定义了 快速连接, 浏览菜单,用户菜单和快速查找输入框.在这个示例中,我们将会尝试修改顶部的菜单部分的背景和一些自定义的图片. 创建一个 ...

  4. web前端识别文字转语音

    const msg = new SpeechSynthesisUtterance("hello world"); window.speechSynthesis.speak(msg) ...

  5. JavaScript(JS)之简单介绍

    一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) N ...

  6. Nginx详解二十五:Nginx架构篇之Nginx常见的问题

    Nginx常见的问题 1.相同server_name多个虚拟主机优先级访问,是按读取文件的优先级来排序 在/opt/app/下准备3个code文件夹,下面放入3个html文件,里面的内容分别是code ...

  7. Html页面添加百度地图

    1.进入百度地图开放平台 http://lbsyun.baidu.com/ 2.进入右上角的   “API控制台” 在这里创建应用 并 获取密钥 3.进入 如下地址 创建地图 http://api.m ...

  8. 插件使用一顶部消息提示---overhang

    overhang 是一个非常好的消息提示插件,它是在顶部提示. 官方网站:https://github.com/paulkr/overhang.js 使用方法 1.引入jquery库和jqeury u ...

  9. 跨域 jQuery库ajax请求

    XMLHttpRequest是原生ajax,缺点是使用起来比较繁琐. jQuery库提供了一组简洁的ajax请求方法. ajax() get() post() 具体使用参考官方API: http:// ...

  10. python no module named builtins

    使用python2时出现此错误. 解决办法: pip install future