第八篇Django分页

Django分页

1.复杂版

data = []for i in range(1, 302):tmp = {"id": i, "name": "alex-{}".format(i)}data.append(tmp)print(data)def user_list(request):# user_list = data[0:10]# user_list = data[10:20]try:current_page = int(request.GET.get("page"))except Exception as e:current_page = 1per_page = 10# 数据总条数total_count = len(data)# 总页码total_page, more = divmod(total_count, per_page)if more:total_page += 1# 页面最多显示多少个页码max_show = 11half_show = int((max_show-1)/2)if current_page <= half_show:show_start = 1show_end = max_showelse:if current_page + half_show >= total_page:show_start = total_page - max_showshow_end = total_pageelse:show_start = current_page - half_showshow_end = current_page + half_show# 数据库中获取数据data_start = (current_page - 1) * per_pagedata_end = current_page * per_pageuser_list = data[data_start:data_end]# 生成页面上显示的页码page_html_list = []# 加首页first_li = '<li><a href="/user_list/?page=1">首页</a></li>'page_html_list.append(first_li)# 加上一页if current_page == 1:prev_li = '<li><a href="#">上一页</a></li>'else:prev_li = '<li><a href="/user_list/?page={}">上一页</a></li>'.format(current_page - 1)page_html_list.append(prev_li)for i in range(show_start, show_end+1):if i == current_page:li_tag = '<li class="active"><a href="/user_list/?page={0}">{0}</a></li>'.format(i)else:li_tag = '<li><a href="/user_list/?page={0}">{0}</a></li>'.format(i)page_html_list.append(li_tag)# 加下一页if current_page == total_page:next_li = '<li><a href="#">下一页</a></li>'else:next_li = '<li><a href="/user_list/?page={}">下一页</a></li>'.format(current_page+1)page_html_list.append(next_li)# 加尾页page_end_li = '<li><a href="/user_list/?page={}">尾页</a></li>'.format(total_page)page_html_list.append(page_end_li)page_html = "".join(page_html_list)return render(request, "user_list.html", {"user_list": user_list, "page_html": page_html})
复杂版

2.封装保存版

class Pagination(object):def __init__(self, current_page, total_count, base_url, per_page=10, max_show=11):"""
        :param current_page: 当前页:param total_count: 数据库中数据总数:param per_page: 每页显示多少条数据:param max_show: 最多显示多少页"""
        try:current_page = int(current_page)except Exception as e:current_page = 1self.current_page = current_pageself.total_count = total_countself.base_url = base_urlself.per_page = per_pageself.max_show = max_show# 总页码total_page, more = divmod(total_count, per_page)if more:total_page += 1half_show = int((max_show - 1) / 2)self.half_show = half_showself.total_page = total_page@propertydef start(self):return (self.current_page - 1) * self.per_page@propertydef end(self):return self.current_page * self.per_pagedef page_html(self):if self.current_page <= self.half_show:show_start = 1show_end = self.max_showelse:if self.current_page + self.half_show >= self.total_page:show_start = self.total_page - self.max_showshow_end = self.total_pageelse:show_start = self.current_page - self.half_showshow_end = self.current_page + self.half_show# 生成页面上显示的页码page_html_list = []# 加首页first_li = '<li><a href="{}?page=1">首页</a></li>'.format(self.base_url)page_html_list.append(first_li)# 加上一页if self.current_page == 1:prev_li = '<li><a href="#">上一页</a></li>'else:prev_li = '<li><a href="{0}?page={1}">上一页</a></li>'.format(self.base_url, self.current_page - 1)page_html_list.append(prev_li)for i in range(show_start, show_end + 1):if i == self.current_page:li_tag = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)else:li_tag = '<li><a href="{0}?page={1}">{1}</a></li>'.format(self.base_url, i)page_html_list.append(li_tag)# 加下一页if self.current_page == self.total_page:next_li = '<li><a href="#">下一页</a></li>'else:next_li = '<li><a href="{0}?page={1}">下一页</a></li>'.format(self.base_url, self.current_page + 1)page_html_list.append(next_li)# 加尾页page_end_li = '<li><a href="{0}?page={1}">尾页</a></li>'.format(self.base_url, self.total_page)page_html_list.append(page_end_li)return "".join(page_html_list)
封装保存版

3.封装保存版使用指南

def user_list(request):pager = Pagination(request.GET.get("page"), len(data), request.path_info)user_list = data[pager.start:pager.end]page_html = pager.page_html()return render(request, "user_list.html", {"user_list": user_list, "page_html": page_html})
View Code

 

转载于:https://www.cnblogs.com/a438842265/p/8735958.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20179214 《网络攻防实践》第五周学习

20179214 《网络攻防实践》第五周学习 web应用程序体系结构及其安全威胁 web应用程序体系结构 浏览器 标准的web客户端&#xff0c;Web服务器 通常被简单的描述为http守护程序&#xff0c;接受web客户端对资源的请求。Web应用程序 是处于服务器端的业务逻辑&#xff0c;最普遍的…

android studio 4.2.1 下载——安卓12开发

下载地址 &#xff1a;百度网盘 请输入提取码

Python学习——02-Python基础——【9-面向对象进阶】——isinstance(obj,cls)、反射等...

一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj Foo() 5 6 isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 1 class Foo(object): 2 pa…

工作261:ele-layont布局使用

<!--页面主体布局--> <template><el-container class"layout"><!--头部组件--><el-header class"element-header" style"height: 80px;line-height: 80px"><global-header /></el-header><el-con…

68-Flutter中极光推送的使用

1、申请极光账号和建立应用 极光推送的官方网址为&#xff1a;https://www.jiguang.cn/ 注册好后&#xff0c;进入服务中心,然后再进入开发者平台&#xff0c;点击创建应用。 这时候会出现新页面&#xff0c;让你填写“应用名称”和上传“应用图标”。 创建完成&#xff0c;极…

工作263:弹性布局 修改样式

<div class"container" style"display: flex;flex-direction: column"><!-- <el-radio-group v-model"mode">--><div ><!-- <el-radio-button class"login-btn" label"0">营销端</el…

MongoDB系列四(索引).

一、索引简介 再来老生常谈一番&#xff0c;什么是索引呢&#xff1f;数据库索引与书籍的索引类似。有了索引就不需要翻整本书&#xff0c;数据库可以直接在索引中查找&#xff0c;在索引中找到条目以后&#xff0c;就可以直接跳转到目标文档的位置&#xff0c;这能使查找速度提…

并发编程之多线程线程安全(上)

1、为什么有线程安全问题&#xff1f; 当多个线程共享同一个全局变量或静态变量&#xff0c;做写的操作时&#xff0c;可能会发生数据冲突问题&#xff0c;也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例&#xff1a;现在有100张火车票&#xff0c;有两个窗口…

并发编程快速入门

1、线程与进程的区别 进程是所有线程的集合&#xff0c;每一个线程是进程中的一条执行路径。 比方&#xff1a;通过查看 windows 任务管理器中的列表&#xff0c;我们可以把运行在内存中的 exe 文件理解成进程&#xff0c;进程是受操作系统管理的基本运行单元。 2、为什么要…

工作275:表单验证层级添加

<template><!--绑定了一个 控制是否为全屏fullscreen close-on-click-modal 是否通过点击model进行关闭 visible是否显示弹出框 close关闭按钮 --><el-dialog :title"fullTitle" width"80%" :fullscreen"false" :close-on-click-…

Python 黑帽子第二章运行截图

转载于:https://www.cnblogs.com/blankicefire/p/8796158.html

公司网页添加旺旺,状态不正确

这两天在给公司做的网站添加旺旺&#xff0c;在阿里巴巴官网生成代码之后复制到网页。想试试旺旺的状态是否正确&#xff0c;登录旺旺之后一直都是不在线状态&#xff0c;如下图&#xff1a; &#xff0c; 到官网问客服之后得到的答复如下&#xff1a; 如果您登录了阿里旺旺…

并发编程之多线程线程安全(下)

1、什么是 Volatile&#xff1f; volatile 是一个类型修饰符&#xff0c;具有可见性&#xff0c;也就是说一旦某个线程修改了该被 volatile 修饰的变量&#xff0c;它会保证修改的值会立即被更新到主存&#xff0c;当有其他线程需要读取时&#xff0c;可以立即获取修改之后的值…

工作265:v-model实现原理 自定义组件使用v-model

v-model只是一个语法糖&#xff0c;等于:valueinput&#xff0c;真正的实现靠的还是&#xff1a; &#xfeff;v-bind:绑定响应式数据&#xff0c;触发 input 事件并传递数据 (核心和重点) 1其实和下面一样的 <input :value“something” input“something $event.target…

idea中隐藏.iml文件

在创建父子工程或者聚合工程时产生的大量 .iml 文件&#xff0c;有时会对我们的操作产生干扰&#xff0c;所以&#xff0c;一般情况下&#xff0c;我们都将其隐藏掉&#xff0c;步骤如下&#xff1a; File——>settings——>Editor——>File Types——>Ignore fil…

微信小程序视频弹幕效果

这次&#xff0c;和大家一起探讨下小程序视频弹幕一、按照老规矩&#xff0c;先附上gif效果图&#xff1a;二、接下来看下官方文档API对vide说明PS&#xff1a;相关属性解析&#xff1a;danmu-list:弹幕列表 enable-danmu:是否显示弹幕 danmu-btn:弹幕按钮 controls:是否显示视…