Django-自定义分页组件
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-自定义分页组件的更多相关文章
- Django框架---- 自定义分页组件
分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...
- Python自定义分页组件
为了防止XSS即跨站脚本攻击,需要加上 safe # 路由 from django.conf.urls import url from django.contrib import admin from ...
- Django自定义分页并保存搜索条件
Django自定义分页并保存搜索条件 1.自定义分页组件pagination.py import copy class Pagination: def __init__(self, current_p ...
- Django----列表分页(使用Django的分页组件)
目的:是为了实现列表分页 1.定制URL http://127.0.0.1:8000/blog/get_article?page=3之前定制URL是在url后增加了/id,这次使用参数的方式 def ...
- Angular4.+ ngx-bootstrap Pagination 自定义分页组件
Angular4 随笔(二) ——自定义分页组件 1.简介 本组件主要是实现了分页组件显示功能,通过使用 ngx-bootstrap Pagination分页组件实现. 基本逻辑: 1.创建一个分页 ...
- vue 自定义分页组件
vue2.5自定义分页组件,可设置每页显示条数,带跳转框直接跳转到相应页面 Pagination.vue 效果如下图: all: small(只显示数字和上一页和下一页): html <temp ...
- 基于 Python 的自定义分页组件
基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...
- vue自定义分页组件---切图网
vue2.5自定义分页组件 Pagination.vue,可设置每页显示条数,带跳转框直接跳转到相应页面,亲测有用.目前很多框架自带有分页组件比如elementUI,不过在面对一个拿到PSD稿,然后重 ...
- Django - 自定义分页、FBV和CBV
一.自定义分页(优势在于能够保存搜索条件) """ 分页组件使用示例: 1) 先取出所有数据USER_LIST 2) 实例化: obj = Pagination(requ ...
- Django——自定义分页(可调用)
1.view from django.shortcuts import render,HttpResponse # Create your views here. from app01.models ...
随机推荐
- $Python常用内置函数典型用法
Python中有许多功能丰富的内置函数,本文基于Python 2.7,就常用的一些函数的典型用法做一些积累,不断更新中. sorted函数的三种用法 # coding:utf-8 # sorted函数 ...
- python3 驱动 PyMySQL
Python版本: 3.5.0 MySqlDB官网只支持Python3.4, 使用第三方库PyMysql连接Mysql数据库. https://pypi.python.org/pypi/PyMySQ ...
- tomcat 连接器优化
在$CATALINA_HOME/conf/server.xml配置文件中的Connetctor节点,和连接数相关的参数配置和优化. maxThreads Tomcat使用线程来处理接收的每个请求.这个 ...
- java线程方面的知识
java中单继承,多实现的: 若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承. 为什么是多实现呢? 通过实现接口拓展了类的功能,若实现的多个接口中有重复的 ...
- 百度console输出
try{ if(window.console&&window.console.log) { console.log("一张网页,要经历怎样的过程,才能抵达用户面前?\n一位新 ...
- MySQL—记录的增删改查操作
1.插入记录: 方法一:INSERT [INTO] tbl_name [(col_name,···)] {VALUES|VALUE} ({expr |DEFAULT},···),(···),··· 例 ...
- Maven错误recv failed
问题: 从SVN上检出了一个Maven项目,在执行clean命令时,出现如下错误: java.net.SocketException:Software caused connection ab ...
- spring 概念理解
一.Spring的IoC(Inversion of Control).这是Spring中得有特点的一部份.IoC又被翻译成“控制反转”,也不知道是谁翻译得这么别扭,感觉很深奥的词.其实,原理很简单,用 ...
- python文件打开的几种访问模式
文件打开的几种访问模式 访问模式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. w 打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. a ...
- jqGrid入门简单使用
jqGrid中文API:https://blog.mn886.net/jqGrid/ 这里没有请求后台,是直接读取本地.json文件 就两个文件,一个html.一个json文件,jquery是jqgr ...