Django分页(一)

手动实现简单分页

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="header">
<div>
{% for user in user_list %}
<li>{{ user.name }} {{ user.age }} </li>
{% endfor %}
{{ prev_page }}<a href="/index?p={{ prev_page }}">上一页</a>
{{ next_page }}<a href="/index?p={{ next_page }}">下一页</a>
</div> </div>
</body>
</html>

Views代码

from django.shortcuts import render,HttpResponse,redirect
from blog.models import *
from django.views import View
# Create your views here. USER_LIST=[]
for i in range(888):
temp={'name':'root'+str(i),'age':i}
USER_LIST.append(temp)
per_page_count = 10 # 定义每页要显示多少行数据 def get_index(request): current_page=request.GET.get('p')#获取客户端传过来的参数,得到翻到哪一页
current_page = int(current_page) # 字符--〉数字
start = (current_page - 1) * per_page_count # 定义从哪一行开始
end = current_page * per_page_count # 定义数据在哪一行结束
data = USER_LIST[start:end] # 对数据进行切片
# p=1
# 0,10 0-9
# p=2
# 10,20 10-19

#上一页
prev_page=current_page-1
#下一页
next_page=current_page+1 return render(request,"index.html",{'user_list':data,'prev_page':prev_page,'next_page':next_page})

  

Django分页简单使用

在html文件下创建include目录,然后把分页功能代码放入其中

使用include引入功能html文件

功能html文件如下:

		{% if posts.has_previous %}
<a href="?p={{ posts.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
{% if posts.has_next %}
<a href="?p={{ posts.next_page_number }}">Next</a>
{% endif %}

  

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="header">
<div> <ul>
{% for user in posts.object_list %}
<li>{{ user.name }} {{ user.age }} </li>
{% endfor %} </ul> {% if posts.has_previous %}
<a href="?p={{ posts.previous_page_number }}">Previous</a>
{% endif %}
<span class="current">
Page {{ posts.number }} of {{ posts.paginator.num_pages }}.
</span>
{% if posts.has_next %}
<a href="?p={{ posts.next_page_number }}">Next</a>
{% endif %}
<!--{% include 'include/page1.html' %}--> </div> </div>
</body>
</html>

View代码

from django.shortcuts import render,HttpResponse,redirect
from blog.models import *
from django.views import View
# Create your views here.
USER_LIST=[]
for i in range(888):
temp={'name':'root'+str(i),'age':i}
USER_LIST.append(temp)
per_page_count = 10 # 定义每页要显示多少行数据 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
def get_index1(request): #django分页主要有两个对象:paginator与page对象 #如果这里是表的话models.表名.objects.all()来操作
#将表里所有的内容都放进去,每页显示10条记录
paginator=Paginator(USER_LIST,10) #实例化Paginator
#全部数据:USER_LIST
#per_page:每页显示条目数量
#count:数据据总个数
#num_pages:总页数
#page_range:总页数的索引范围
#page:page对象(是否有上一页,是否有下一页) current_page=request.GET.get('p')
current_page = int(current_page) # 字符--〉数字
print(current_page) try:
posts = paginator.page(current_page)
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
# print(posts.object_list)
except PageNotAnInteger:#如果输入内容不为整数,传入页面1
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'index1.html', {'posts': posts})

  

Django分页自定义使用

功能html

{% if posts.has_previous %}
<a href="?p={{ posts.previous_page_number }}">Previous</a>
{% endif %} {% for i in posts.paginator.page_num_range %}
<a href="?p={{ i }}">{{ i }}</a>
{% endfor %} {% if posts.has_next %}
<a href="?p={{ posts.next_page_number }}">Next</a>
{% endif %}

  

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div class="header">
<div> <ul>
{% for user in posts.object_list %}
<li>{{ user.name }} {{ user.age }} </li>
{% endfor %} </ul>
{% include 'include/page1.html' %} </div> </div>
</body>
</html>

  

View代码

class CustomPaginator(Paginator):
def __init__(self, current_page, max_pager_num, *args, **kwargs):
"""
:param current_page: 当前页
:param max_pager_num:最多显示的页码个数
:param args:
:param kwargs:
:return:
"""
self.current_page = int(current_page)
self.max_pager_num = max_pager_num
super(CustomPaginator, self).__init__(*args, **kwargs) def page_num_range(self):
# 当前页面
# self.current_page
# 总页数
# self.num_pages
# 最多显示的页码个数
# self.max_pager_num
print(1)
if self.num_pages < self.max_pager_num:
return range(1, self.num_pages + 1)
print(2)
part = int(self.max_pager_num / 2)
if self.current_page - part < 1:
return range(1, self.max_pager_num + 1)
print(3)
if self.current_page + part > self.num_pages:
return range(self.num_pages + 1 - self.max_pager_num, self.num_pages + 1)
print(4)
return range(self.current_page - part, self.current_page + part + 1) def get_index2(request):
current_page = request.GET.get('p')
current_page=int(current_page)
paginator = CustomPaginator(current_page, 11, USER_LIST, 10)
# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page: page对象
try:
posts = paginator.page(current_page)
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
print(posts.object_list)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages) return render(request, 'index2.html', {'posts': posts})

  

Django分页(一)的更多相关文章

  1. django 分页(2) 使用类 页码显示

    django 分页显示页码 views.py 显示11页码 ) < 起始位置 - 10总页数 else 总页数 > IF 当前页 小于 起始位置 结束页 IF 当前页 大于 IF 如果结束 ...

  2. Django 分页功能

    Django 分页功能比较强大,这边是结合官网的内容写的可以参考 https://docs.djangoproject.com/en/1.9/topics/pagination/ 分页命令行练习案列 ...

  3. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  4. django 分页组件

      一.仿django分页功能自己实现 urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from django.contrib i ...

  5. Django分页(二)

    Django分页(二) 要求 .设定每页显示数据条数 # # .用户输入页码(第一页.第二页...) # # .设定显示多少页号 # # .获取当前数据总条数 # # .根据设定显示多少页号和数据总条 ...

  6. django 分页出现 UnorderedObjectListWarning 错误

    django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unorde ...

  7. 2019.03.20 mvt,Django分页

    MVT模式   MVT各部分的功能:   M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理.       V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返 ...

  8. Django分页类的封装

    Django分页类的封装 Django ORM  封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...

  9. Django分页的实现

    Django分页的实现 Django ORM  分页介绍 分页是网页浏览中常见到的一种形式,在数据量较大时,一个页面显示不全,采取分割数据由用户选择进行显示的方式. 基本实现 技术点 通过切片得到数据 ...

随机推荐

  1. bat命令行实现全盘遍历搜索文件

    背景:当想要查找一个文件时,记得放在某个盘里.手动去遍历时感觉好心累,找了半天还是没有找着(虽然win有自带的搜索框,但是看着进度条的速度,我便果断的点了取消).基于这个情况,所以写了脚本满足自身查找 ...

  2. Max Sum (dp)

    Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. F ...

  3. 进入页面,根据后台传过来的flag 判断列表隐藏与否

    需求描述:页面中有两个列表,一个已添加,一个可以添加,进入页面的时候,如果已添加中有数据则显示,没有数据就隐藏,emmmm,这种需求,我该怎么吐槽嗷嗷嗷 解决思路:让已添加的列表的div默认隐藏,前台 ...

  4. bzoj 3529

    非常好的一道莫比乌斯反演题,对提升自己的能力有很大帮助. 首先我们分析一下题意:题意让我们求,其中 那么我们首先对后面的式子进行一下变形,变形过程详见https://blog.csdn.net/lle ...

  5. linux里面的命令:./和. /(这里有空格)的区别

    /  ( 直接/ ) 直接 / 表示: 根目录. ./ ( 点号紧跟/ ) 点号紧跟/ 表示: 当前目录(相对路径的写法). . / ( 点号 空格 / ) 有空格的点号等同于source命令,表示在 ...

  6. animate方法使用总结

    <!DOCTYPE html><html lang="en" class="loading"><head> <meta ...

  7. 论文阅读笔记十:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs (DeepLabv2)(CVPR2016)

    论文链接:https://arxiv.org/pdf/1606.00915.pdf 摘要 该文主要对基于深度学习的分割任务做了三个贡献,(1)使用空洞卷积来进行上采样来进行密集的预测任务.空洞卷积可以 ...

  8. module.exports与exports的区别

    引言 每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} 例子 foo.js exports.a = functi ...

  9. 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法

    如果在X64系统下我们想利用 MS SQL 的DTS导入导出 Oracle 数据,由 oracle 不支持路径中包含")",会引发 ORA-06413:连接未打开错误 解决的办法很 ...

  10. [转] JavaScript 之 ArrayBuffer

    JS里的ArrayBuffer 还记得某个晚上在做 canvas 像素级操作,发现存储像素的数据格式并不是Array类型,而是ArrayBuffer,心想这是什么鬼?后来查了一些资料,发现自己这半年来 ...