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 ...
随机推荐
- 在终端启动Python时报错的解决
最近,在终端启动Python时,报了一个错误: 1 Failed calling sys.__interactivehook__ 2 Traceback (most recent call last) ...
- Elasticsearch:如何对PDF文件进行搜索
Elasticsearch 通常用于字符串,数字,日期等数据类型的检索,但是在 HCM.ERP 和电子商务等应用程序中经常存在对办公文档进行搜索的需求.今天的这篇文章中我们来讲一下如何实现 PDF.D ...
- Fluentd直接传输日志给MongoDB (standalone)
官方文档地址:https://docs.fluentd.org/output/mongo td-agent版本默认没有包含out_mongo插件,需要安装这个插件才能使用 使用的是td-agent,安 ...
- Lock 锁底层实现
★ 1.讲讲 Lock 锁 是一个接口,有三个实现类,分别是常用的 可重入锁,读锁.写锁.常用的是可重入锁. 加锁使用lock() 方法,解锁使用 unlock() 方法.Lock的底层是 AQS+C ...
- 【前端必会】前端开发利器VSCode
介绍 工欲善其事必先利其器,开发工具方面选择一个自己用的顺手的,这里就用VSCode 安装参考 https://www.runoob.com/w3cnote/vscode-tutorial.html ...
- Spring mvc源码分析系列--Servlet的前世今生
Spring mvc源码分析系列--Servlet的前世今生 概述 上一篇文章Spring mvc源码分析系列--前言挖了坑,但是由于最近需求繁忙,一直没有时间填坑.今天暂且来填一个小坑,这篇文章我们 ...
- 前端程序员学习 Golang gin 框架实战笔记之一开始玩 gin
原文链接 我是一名五六年经验的前端程序员,现在准备学习一下 Golang 的后端框架 gin. 以下是我的学习实战经验,记录下来,供大家参考. https://github.com/gin-gonic ...
- cifar-10-dataset
import cv2 import numpy as np import os import pickle data_dir = os.path.join("data", &quo ...
- 文盘Rust -- struct 中的生命周期
最近在用rust 写一个redis的数据校验工具.redis-rs中具备 redis::ConnectionLike trait,借助它可以较好的来抽象校验过程.在开发中,不免要定义struct 中的 ...
- 一篇文章带你了解热门版本控制系统——Git
一篇文章带你了解热门版本控制系统--Git 这篇文章会介绍到关于版本控制的相关知识以及版本控制神器Git 我们可能在生活中经常会使用GitHub网页去查询一些开源的资源或者项目,GitHub就是基于G ...