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 ...
随机推荐
- LVGL 模拟仿真(Windows+CodeBlocks)
一.准备材料 Code Blocks官网:https://www.codeblocks.org/ Code Blocks 汉化包:链接: https://pan.baidu.com/s/12zB5bD ...
- Django 简介和版本介绍
一.简介 官方地址:https://www.djangoproject.com Django 是一个由Python 编写的具有完整架站能力的开源Web框架.使用 Django,只要很少的代码,开发人员 ...
- k8s中安装各软件的yaml文件
网址:https://www.kubebiz.com/ 网站:https://k8syaml.com/
- 配置 Containerd 在 harbor 私有仓库拉取镜像
官方文档地址:https://github.com/containerd/cri/blob/master/docs/registry.md 严格来说,这个具体可分为两部分 1.在k8s中使用Conta ...
- kvm使用桥接的方法
什么是桥接 桥接就是把物理机的网卡模拟成交换机,虚拟机的网卡直接连在虚拟的网桥即交换机上.这样kvm虚拟机分配的IP地址,就应该和物理机在同一网段,可以对外进行服务. 在KVM下运行的VM默认的网卡采 ...
- MySQL集群搭建(5)-MHA高可用架构
1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...
- 了解如何配置Nginx日志
设置access_log 访问日志主要记录客户端的请求.客户端向Nginx服务器发起的每一次请求都记录在这里.客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到. ...
- Fluentd直接传输日志给MongoDB (standalone)
官方文档地址:https://docs.fluentd.org/output/mongo td-agent版本默认没有包含out_mongo插件,需要安装这个插件才能使用 使用的是td-agent,安 ...
- 天天向上力量B
N=eval(input()) up=pow(1+0.001*N,365) down=pow(1-0.001*N,365) print("{:.2f}, {:.2f}, {:.0f}&quo ...
- NSIS皮肤插件:vcl-styles-plugins
vcl-styles-plugins简介 NSISVCLStyles plugin (dll)是一款应用于nsis安装程序的皮肤插件,插件大小约为1.6MB,实际应用在安装程序中压缩后约为550 ...