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 ...
随机推荐
- 萌新码农的第一篇:MarkDown的使用方法
MarkDown的使用方法 使用的编辑软件Typora 1.标题的使用方法 输入''#''然后空格,输入标题名字即可生成标题. 随着''#''的增多,标题的大小会依次减小,最多到六级标题 2.排字 字 ...
- 1.云原生之Docker容器技术基础知识介绍
转载自:https://www.bilibili.com/read/cv15180540/?from=readlist
- UDP协议编程
#接收代码 import socket # 使用IPV4协议,使用UDP协议传输数据 s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定端口 ...
- linux安装Texinfo
安装步骤 tar zxvf texinfo-5.2.tar.gz cd texinfo-5.2 ./configure --prefix=/usr make make check make insta ...
- SECS半导体设备通讯-1 SECS的基本概念
一 什么是SECS SECS(SEMI Equipment Communication Standard),半导体设备通讯标准. 此标准由SEMI (Semiconductor Equipment a ...
- Node.js(七)MySql+ajax
Api.js const express=require("express"); const router=express.Router(); const mysql = requ ...
- ArcMap布局添加图表问题
在ArcMap分析制图过程中,经常会产生一些图表,然而在布局中添加这些图表会发现一些意想不到的问题. 问题重现 将图表直接添加到布局会发现图表有黑底,这在我们布局出图中是十分不美观的,这该如何解决呢? ...
- RAID5 IO处理之对齐读代码详解
1 总体流程 当一个读请求的覆盖范围落在一个chunk范围内时为对齐读,流程图如下所示: 2 入口 在RAID5的IO处理函数 make_request() 一开始进行了对齐读的判断和处理,代码如下所 ...
- 图解 | 聊聊 MyBatis 缓存
首发公众号-悟空聊架构:图解 | 聊聊 MyBatis 缓存 你好,我是悟空. 本文主要内容如下: 一.MyBatis 缓存中的常用概念 MyBatis 缓存:它用来优化 SQL 数据库查询的,但是可 ...
- 【多线程那些事儿】如何使用C++写一个线程安全的单例模式?
如何写一个线程安全的单例模式? 单例模式的简单实现 单例模式大概是流传最为广泛的设计模式之一了.一份简单的实现代码大概是下面这个样子的: class singleton { public: stati ...