1.封装的分页代码:

class PageInfo(object):
def __init__(self,current_page,all_count,per_page,base_url,show_page=):
''' :param current_page: 当前页面
:param all_count: 总行数
:param per_page: 每页显示的行数
:param base_url: 要跳转的url
:param shpw_page: 显示多少个页面,默认为7
'''
try:
#当前页面
self.current_page = int(current_page)
except Exception as e:
#出错就让当前页=
self.current_page = #每页显示的行数
self.per_page = per_page #内置函数,总行数,每页的行数= 整数,余数
a,b = divmod(all_count,per_page) #b:余数。如果是有数即True
if b:
#有余数就在总页数上+
a +=
#总页数
self.all_pager = a
#显示的页码数
self.show_page = show_page #跳转的url,可以供不同的功能,如:学生管理,老师管理.....等
self.base_url = base_url
#起始函数
def start(self):
#(当前页 - ) * 每页行数
return (self.current_page - ) * self.per_page #结束函数
def end(self):
#当前页*页面行数
return self.current_page * self.per_page def pager(self):
#存放页码
page_list = [] #当前页面中显示的页码-/,左右显示的数量
half = int((self.show_page-)/) #如果数据总页数<
if self.all_pager < self.show_page:
#重新设定起始值和结束值
begin =
stop = self.all_pager +
# 如果数据总页数>
else:
#如果当前页 <= ,永远显示1,
if self.current_page <= half:
begin =
stop = self.show_page +
else:
#当前页 + > 总页数
if self.current_page + half > self.all_pager:
#总页数 - 显示的页数 +
begin = self.all_pager - self.show_page +
#总页数 +
stop = self.all_pager +
# 当前页 + < 总页数
else:
#当前页码 -
begin = self.current_page - half
#当前页码 + +
stop = self.current_page + half +
#当前页码<=,就让当前的上一页刷新当前页面
if self.current_page <= :
# prev = '<li><a href="#">上一页</a></li>'
#如果是1,就让上一页消失
prev = ''
#当前页码>,就让当前的上一页加1,持续进行分页操作
else:
prev = '<li><a href="%s?page=%s">上一页</a></li>'%(self.base_url,self.current_page-,)
#将页码存入到list中
page_list.append(prev) #遍历页码,起始值————结束值
for i in range(begin,stop):
#i == 当前的页码
if i == self.current_page:
#就给当前的页码添加一个样式,以便区分当前选中的页码是多少
temp = '<li class="active" ><a href="%s?page=%s">%s</a></li>'%(self.base_url,i,i,)
# i != 当前的页码
else:
#就不管
temp = '<li><a href="%s?page=%s">%s</a></li>'%(self.base_url,i,i,)
page_list.append(temp)
#当前页大于总页数
if self.current_page >= self.all_pager:
# nex = '<li><a href="#">下一页</a></li>'
nex = ''
# 当前页小于总页数
else:
#每点击下一页进行加1
nex = '<li><a href="%s?page=%s">下一页</a></li>'%(self.base_url,self.current_page + ,)
#添加到list中
page_list.append(nex)
#字符串拼接
return ''.join(page_list)

2.调用分页的函数:views.py中

#运行的函数
def custom(request):
#总行数
all_count = models.UserInfo.objects.all().count() #调用分页的class,并实例化对象。当前页码|总页码数|每页显示的行数|跳转的url
page_info = PageInfo(request.GET.get('page'),all_count,,'/custom.html')
#拿到我所有的数据
user_list = models.UserInfo.objects.all()[page_info.start():page_info.end()] return render(request,'custom.html',locals())

3.路由系统:urls.py

url(r'^custom.html$', views.custom),

4.html中的代码 :使用了bootstrap中的分页组件样式

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/css/bootstrap.min.css" />
</head>
<body>
<h1>用户表</h1>
<ul>
{% for row in user_list %}
<li>{{ row.name }}|{{ row.age }}|{{ row.ug.title }}</li>
{% endfor %} </ul>
{# 使用的bootstrap中的组件#}
<nav aria-label="Page navigation">
<ul class="pagination">
{# page_info.pager|safe:显示我定义好的pager函数,并且使用模板中的safe方法,让在后端写的标签生效,不写safe,那么前端页面原样输出我写的标签#}
{{ page_info.pager|safe }}
</ul>
</nav>
</body>
</html>

Django-自定义分页组件的更多相关文章

  1. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  2. Python自定义分页组件

    为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...

  3. Django自定义分页并保存搜索条件

    Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...

  4. Django----列表分页(使用Django的分页组件)

    目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...

  5. Angular4.+ ngx-bootstrap Pagination 自定义分页组件

    Angular4 随笔(二)  ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...

  6. vue 自定义分页组件

    vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ...

  7. 基于 Python 的自定义分页组件

    基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...

  8. vue自定义分页组件---切图网

    vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...

  9. Django - 自定义分页、FBV和CBV

    一.自定义分页(优势在于能够保存搜索条件) """ 分页组件使用示例: 1) 先取出所有数据USER_LIST 2) 实例化: obj = Pagination(requ ...

  10. Django——自定义分页(可调用)

    1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...

随机推荐

  1. IDEA 2018.2破解

    最新的IDEA激活方式 使用网上传统的那种输入网址的方式激活不了,使用http://idea.lanyus.com/这个网站提供的工具进行 1.进入hosts文件中:C:\Windows\System ...

  2. [caffe]caffe资料收集

    1.caffe主页,有各种tutorial. 2.Evan Shelhamer的tutorial,包括视频.

  3. centos6.7安装lamp

    1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport ...

  4. [简明版] 有道云笔记Markdown指南

    使用有道词典配合Markdown,可以快速准确做出美观精致的笔记,下面我们来看一下如何使用有道词典的MarkDown功能. 什么是Markdown?Markdown是一种轻量级的「标记语言」,通常为程 ...

  5. Python3.x:报错POST data should be bytes, an iterable of bytes

    Python3.x:报错POST data should be bytes, an iterable of bytes 问题: python3.x:报错 POST data should be byt ...

  6. React 常用插件库

    js 加密 crypto-js (des加密,md5) crypto-js https://www.npmjs.com/package/crypto-js Mock联调 数据是前端开发过程中必不可少的 ...

  7. 关于Linq的对List<实体>去掉重复ID的一个小例子!

    注意 下面的代码只要ID相同(即使其他的不相同)都会过滤掉,简单来讲就是过滤掉ID相同的实体,如果ID相同,其他属性取第一个的值 List<Abc> list = new List< ...

  8. JavaScript校验网址

    JavaScript校验网址 var linkUrl = 'https://www.baidu.com' if( typeof (linkUrl) != undefined && li ...

  9. 2017阿里C++研发工程师-校招-单词匹配

    题目描述 给一个字符串, 然后给一个字典. 把字符串分解成字典里的单词组成的句子, 请输出所需空格最少的方案.并输出该方案. 样例 例如: 字符串为: str="ilikealibaba&q ...

  10. linux系统调用是通过软中断实现的吗

    软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果.很多情况下,软中断和信号有些类似,同时,软中断又是和硬中断相对应的,硬中断是外部设备对CPU的中断,软中断通常是硬中断服务程序 ...