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. 20145240《网络对抗》Web安全基础实践

    Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语 ...

  2. linux第四周

    一.知识点总结 (一)用户态.内核态和中断 1.内核态:在高的执行级别下,代码可以执行特权指令,访问任意的物理地址,这时的CPU就对应内核态 2.用户态:在低级别的指令状态下,代码 只能在级别允许的特 ...

  3. cookie注入原理

    cookie注入原理-->红客联盟 http://www.2cto.com/article/201202/118837.html 前言: document.cookie:表示当前浏览器中的coo ...

  4. MySQL中变量的用法——LeetCode 178. Rank Scores

    Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...

  5. [JavaWeb]关于DBUtils中QueryRunner的一些解读(转)

    QueryRunner类 QueryRunner中提供对sql语句操作的API它主要有三个方法 query() 用于执行select update() 用于执行insert/update/delete ...

  6. Nodejs V8引擎 fast property lookup

    前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...

  7. Sublime使用记录之SublimeServer插件介绍

    Sublime使用记录之SublimeServer插件介绍 介绍:sublimeServer

  8. 【jdk源码分析】java多线程开启的三种方式

    1.继承Thread类,新建一个当前类对象,并且运行其start()方法 package com.xiaostudy.thread; /** * @desc 第一种开启线程的方式 * @author ...

  9. Dropping water balloons (入门dp)

    2017-08-12 18:36:24 writer:pprp 最近刚刚接触动态规划,感觉状态的查找和转移自己很难想到,都是面向题解编程,但是一开始都是这样了,只有相信我可以独立自己解决动态规划这类问 ...

  10. 新一代调试王者Console

    随着JS在Web前端中能做的事情越来越多,责任越来越大,而地位也越来越重要.传统的alert调试方式已经渐渐不能满足前端开发的种种场景.而且alert调试方式弹出的调试信息,那个窗口着实不太美观,而且 ...