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. 清除list或者map集合,减少内存的占用率

    1.在编写程序对数据处理的时候我们经常会使用到list和map集合,有些时候我们存到集合里的数据只是暂时性的,在验证完或者使用完之后尽量对list或者map清空,及list.clear()后者map. ...

  2. 20145303刘俊谦 《Java程序设计》第2周学习总结

    20145303刘俊谦 <Java程序设计>第2周学习总结 教材学习内容总结 1.对于标识符的一些名称规范(觉得挺重要而且容易混淆!定义就不写了,列一些例子): 包名: xxxyyyzzz ...

  3. 20145312 实验五《Java网络编程》

    20145312 实验五<Java网络编程> 一. 实验内容及要求 实验内容: 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密 ...

  4. TCP深入详解

    TCP三次握手.四次挥手时序图: #TCP协议状态机 1.TCP建立连接时的初始化序列号X.Y可以是写死固定的吗?      如果初始化序列号(缩写为ISN:Inital Sequence Numbe ...

  5. unicode下数据之间的转换

    首先mfc下字符串只有两种数据:char(一个字节)和wchar_t(两个字节),很多其他数据类型如TCHAR,WCHAR等都是这个两个基本类型的宏定义,BYTE是uchar 1.对话框打印char* ...

  6. 学Git,用Git ①

    本月开始接触到Git版本管理工具,觉得很有意思,在这里总结一下学习Git的一些心得体会. 要在Mac上完整的使用git进行版本管理,需要熟悉Mac终端操作命令和Git操作命令两种命令,索性两种命令加在 ...

  7. 分布式缓存DistributedCache

    本文是对MR案例:Map-Join的解读. 在hadoop中,共享全局变量或全局文件的几种方法 使用Configuration的set()方法,只适合数据内容比较小的场景 将缓存文件放在HDFS上,每 ...

  8. SpringMVC封装表单数据

    1.domain类 package com.xiaostudy.domain; public class User { private int id; private String username; ...

  9. 04_Storm编程上手_WordCount集群模式运行

    1. 要解决的问题:代码打包 前一篇的代码,在IDEA中通过maven工程创建,通过IDEA完成代码打包 1)File -> Project Structure  2) 选择Artifacts, ...

  10. php入门(三)

    PHP 面向对象: 在php5中 var就是public的别名. 变量 $this 代表自身的对象. PHP_EOL;为换行符 构造函数+析构函数 <?php class Site { /* 成 ...