Django基础笔记2(分页)
Django
Django自带的分页功能
from django.core.paginator import Paginator # 用于分页
curPage = request.GET.get('page')
uL = models.userInfo.objects.all()
# list,每页多少个
pag = Paginator(uL, 10)
# list
# 每页个数
posts = pag.page(eval(curPage)) # 当前是第几页,可由用户发送请求确定;此对象还可判断有无下一页上一页
return render(request, './App2/index.html', {
'userList': posts,
})
<div>
{% if userList.has_previous %}
<a href="./?page={{ userList.previous_page_number }}">上一页</a>
{% endif %}
{% for i in userList.paginator.page_range %}
<a href="./?page={{ i }}">{{ i }}</a>
{% endfor %}
{% if userList.has_next %}
<a href="./?page={{ userList.next_page_number }}">下一页</a>
{% endif %}
</div>
自己做分页
class Page:
def __init__(self, curPage, all, perPage, showPage, url, param):
'''
:param curPage: 当前页
:param all: #数据条数
:param perPage: #每页数据个数
:param showPage: #展示多少页码
:param url:地址
:param param url中所携带的所有参数
'''
a, b = divmod(all, perPage) # 求余,第一个是商,第二个是余数
if b != 0:
a = a + 1
self.allPage = a # 一共有多少页
self.showPage = showPage
self.perPage = perPage
self.url = url
self.param = param
try:
self.curPage = int(curPage) # 防止page参数不规范
if self.curPage > self.allPage:
self.curPage = self.allPage
except Exception:
self.curPage = 1
def start(self):
return (self.curPage - 1) * self.perPage
def end(self):
return self.curPage * self.perPage
def pager(self):
half = int(self.showPage / 2)
# 小于showPage,全部显示
if self.allPage < self.showPage:
begin = 1
end = self.allPage + 1
else: # 大于showPage
begin = self.curPage - half
end = self.curPage + half + 1
# 考虑极值情况
if self.curPage - half <= 0 or self.curPage + half > self.allPage:
if self.curPage - half <= 0:
begin = 1
end = self.showPage + 1
if self.curPage + half > self.allPage:
begin = self.allPage - self.showPage
end = self.allPage + 1
params = []
for i in self.param: # 除了page外,url中可能还会有其他参数
if i.strip() == 'page': # url?page=1&x=1&y=2
pass
else:
params.append(str(i) + '=' + self.param.get(i))
p = '&'.join(params) # x=1&y=2
pagelist = []
if self.curPage > 1:
# 包含了一些bootstrap样式内容
pagelist.append(
'<li class="page-item"><a class="page-link" href="%s?page=%s&%s ">上一页</a></li>' % (
self.url, self.curPage - 1, p))
else:
pagelist.append('<li class="page-item"><a class="page-link">无上一页了</a></li>')
for i in range(begin, end):
temp = '<li class="page-item"><a class="page-link" href="%s?page=%s&%s">%s</a></li>' % (self.url, i, p, i)
if i == self.curPage:
temp = '<li class="page-item active"><a class="page-link">%s</a></li>' % (i,)
pagelist.append(temp)
if self.curPage < self.allPage:
pagelist.append(
'<li class="page-item"><a class="page-link" href="%s?page=%s&%s">下一页</a></li>' % (
self.url, self.curPage + 1, p))
else:
pagelist.append('<li class="page-item"><a class="page-link">无下一页了</a></li>')
return ' '.join(pagelist)
后台的处理函数
def custom(req):
curPage = req.GET.get('page')
perPage = 8 # 每页8个
userlist = models.userInfo.objects.all() # filter(id__lt=30)
page = Page(curPage, len(userlist), perPage, 10,request.path_info,request.GET)
return render(req, './App2/custom.html', {'userlist': userlist[page.start():page.end()], 'page': page})
加 |safe 为了避开django的xss防御机制

还可以在后台加安全标记 mark_safe
Django基础笔记2(分页)的更多相关文章
- Django基础06篇 分页
1.导入Django自带的分页类 from django.core.paginator import Paginator 2.分页类的使用 def index(request): # return H ...
- django基础知识之分页:
分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返回分页对象,参数为列表数据, ...
- Django 基础笔记补充
1.目录文件 django-admin.py startproject mydj cd mydj python manage.py startapp myapp 后生成目录: mydj/ ├── ...
- Django基础笔记
1.准备工作 .虚拟环境设置 python3 pip install virtualenv python -m venv env(虚拟环境文件名) env\Scripts\activate pip i ...
- Django学习笔记(12)——分页功能
这一篇博客记录一下自己学习Django中分页功能的笔记.分页功能在每个网站都是必要的,当页面因需要展示的数据条目过多,导致无法全部显示,这时候就需要采用分页的形式进行展示. 分页在网站随处可见,下面展 ...
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
django Pagination(分页) django 自带的分页功能非常强大,我们来看一个简单的练习示例: #导入Paginator>>> from django.core.p ...
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- 【笔记】Django基础(一)
---恢复内容开始--- [笔记]Django基础(一) oldboy Django 一 关于Python框架的本质 1. HTTP协议消息的格式: 请求(request) 请求方法 路径 HTTP ...
- day 65 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
- day 61 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
随机推荐
- kindeditor获取html内容之终极大法
请允许我哔哔两句,真是难受啊,有问题去百度,结果百了一堆乱七八糟的内容,有头没尾,有尾没头的,搞得我晕头转向,现在把kindeditor获取HTML的终极打法无偿分享出来,这可是我配置查找了一下午的成 ...
- 在Winform开发中,我们使用的几种下拉列表展示字典数据的方式
在Winform开发中中,我们为了方便客户选择,往往使用系统的字典数据选择,毕竟选择总比输入来的快捷.统一,一般我们都会简单封装一下,以便方便对控件的字典值进行展示处理,本篇随笔介绍DevExpres ...
- 如何使用DBeaver连接Hive
1 DBeaver介绍 DBeaver是一个通用的数据库管理工具和 SQL 客户端,支持多种兼容 JDBC 的数据库.DBeaver 提供一个图形界面用来查看数据库结构.执行SQL查询和脚本,浏览和导 ...
- nginx中 location正则的理解
文章转载自:https://blog.csdn.net/wzj_110/article/details/110142902 正则表达式在线测试工具:https://tool.lu/regex loca ...
- 天翼云上新增IP备案具体操作步骤
0.点击右上角的备案,进入到备案中心 1.已备案信息管理 点击左侧的已备案信息管理,右侧出现的页面中找到已备案网站信息,网站负责人后面的操作里有5个图标,点击第三个(变更接入),提交订单,进入到下一步 ...
- 使用nginx-ingress-controller配置https,但是再同时配置使用http
默认情况下,如果为该 Ingress 启用了 TLS,控制器会使用 308 永久重定向响应将 HTTP 客户端重定向到 HTTPS 端口 443.( Ingress 里配置了 https 证书的话,默 ...
- Beats:为 Beats => Logstash => Elasticsearch 架构创建 template 及 Dashboard
文章转载自:https://elasticstack.blog.csdn.net/article/details/115341977 前一段时间有一个开发者私信我说自己的 Beats 连接到 Logs ...
- vue通过插件实现PDF生成以及下载
第一步: 安装插件 npm install --save html2canvas //将html转换成图片 npm install jspdf --save //将图片生成pdf 第二步: 在需要的地 ...
- 使用EF Core更新与修改生产数据库
使用EF Core的Code First,在设计阶段,直接使用Database.EnsureCreated()和EnsureDeleted()可以快速删除.更新最新的数据结构.由于没有什么数据,删除的 ...
- JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
文章目录 1.流程控制语句 1.1 代码 1.2 测试结果 2.弹窗提示输入内容 2.1 代码 2.2 测试结果 3.条件分支语句 3.1 代码 3.2 测试结果 4.while和 do...whil ...