python__Django 分页
2024-09-12 03:54:00
自定义分页的类:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by Mona on 2017/9/20 from django.utils.safestring import mark_safe class Paginator:
'''
页码的格式依赖于bootstrap;
使用案例: from django.shortcuts import render,redirect,HttpResponse
from app01.models import *
from tools import page 导入 def index(request):
base_url = request.path_info
total_item_count = UserInfo.objects.all().count()
current_page = int(request.GET.get('page',1)) page_obj = page.Paginator(total_item_count,current_page,base_url) user_list = UserInfo.objects.all()[page_obj.start:page_obj.end] return render(request,'index.html',{'user_list':user_list,'html_page': page_obj.pager}) '''
def __init__(self,total_item_count,current_page,base_url,
per_page_item_count=10,show_pager_count=11):
'''
:param total_item_count: 总记录数
:param current_page: 当前页码
:param base_url: 页码的前缀URL
:param per_page_item_count: 每页显示的记录数
:param show_pager_count: 显示的页码个数
''' self.total_item_count = total_item_count
self.current_page = current_page
self.base_url = base_url
self.per_page_item_count = per_page_item_count
self.show_pager_count = show_pager_count total_page, res = divmod(self.total_item_count, self.per_page_item_count)
if res:
total_page += 1 self.total_page = total_page
self.half_show_pager_count = int(total_page/2) @property
def start(self):
'''
页码查询数据的开始位置
:return:
'''
return (self.current_page-1)*self.per_page_item_count @property
def end(self):
'''
页码查询数据的结束位置
:return:
'''
return self.current_page*self.per_page_item_count @property
def pager(self):
'''
返回需要的前端页码
:return:
'''
page_list = []
ul = ' <ul class="pagination">'
page_list.append(ul) if self.current_page == 1:
prev = ' <li><a href="#">上一页</a></li>'
else:
prev = ' <li><a href="%s?page=%s">上一页</a></li>' % (self.base_url, self.current_page - 1) page_list.append(prev) # 如果数据特别少:
if self.total_page < self.show_pager_count:
pager_start = 1
pager_end = self.total_page + 1 else:
if self.current_page <= self.half_show_pager_count:
pager_start = 1
pager_end = self.show_pager_count + 1 else:
if self.current_page + self.half_show_pager_count > self.total_page:
pager_start = self.total_page - self.show_pager_count + 1
pager_end = self.total_page + 1
else:
pager_start = self.current_page - self.half_show_pager_count
pager_end = self.current_page + self.half_show_pager_count + 1 for i in range(pager_start, pager_end):
if i == self.current_page:
tpl = ' <li class="active"><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
else:
tpl = ' <li><a href="%s?page=%s">%s</a></li>' % (self.base_url, i, i,)
page_list.append(tpl) if self.current_page == self.total_page:
nex = ' <li><a href="#">下一页</a></li>'
else:
nex = ' <li><a href="%s?page=%s">下一页</a></li>' % (self.base_url, self.current_page + 1,) page_list.append(nex) lu = ' </ul>'
page_list.append(lu) html_page = mark_safe(''.join(page_list))
return html_page
效果展示:
最新文章
- BIT祝威博客汇总(Blog Index)
- Elasticsearch——多索引的使用
- unity资源管理
- spring配置带参数的视图解析器:ParameterMethodNameResolver
- 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
- iOS CocoaPods安装和使用图解
- ITextSharp用来生成 PDF 的一个组件
- JAVA基础英语单词表(下)
- TCP头分析+面试题
- Linux dirname、basename(转)
- mysql模拟插入数据表
- Lua基础(转)
- 参考C++STL标准库中对了的使用方法
- jQuery基础学习(一)&mdash;jQuery初识
- jmeter 实现DB数据与接口数据的匹配校验
- 【Linux】windows-linux、linux-linux文件互传
- Android Service基础
- js 声明提升
- MongoDB Schema Design
- Java将ip字符串转换成整数的代码
热门文章
- java web 开发入门实例
- Codeforces 455A Boredom 取数字的dp
- Asp.net 基于Cookie简易的权限判断
- Unity3D学习笔记——Android重力感应控制小球
- Android-ViewPagerIndicator框架使用——TabPageIndicator
- awk 特征相同的行合并
- 文件存储 FileUtil FileBaseDto
- Android自定义Button字体颜色和背景颜色
- [HAOI2012]Road
- Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决