URL:

"""django_paginner URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.1/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from app01 import views urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('index1/', views.index1), ]

views:

from django.shortcuts import render, HttpResponse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger # Create your views here.
USER_LIST = [] for i in range(1, 659):
temp = {'name': 'root' + str(i), 'age': i}
USER_LIST.append(temp) def index(request):
# 当前的页数
current_page = request.GET.get('p')
# 每页显示10个
per_page_count = 10 # 第一页(0,10)索引是0到9
# 第二页(10,20)索引是10到19 current_page = int(current_page)
# 开始:当前页-1*每页显示10个
# 第二页
# (2-1)*10
start = (current_page - 1) * per_page_count
# 2*10
end = current_page * per_page_count
data = USER_LIST[start:end] if current_page <= 1:
prev_page = 1
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}) class CustomPaginator(Paginator):
def __init__(self, current_page, per_pager_num, *args, **kwargs):
# 当前页
self.current_page = int(current_page)
# 每页最多显示页码数量
self.per_page_num = int(per_pager_num)
super(CustomPaginator, self).__init__(*args, **kwargs) def pager_num_range(self):
# 当前页
# self.current_page
# 每页最多能显示的页码数量,漂亮最好取奇数 11
# self.per_page_num
# 总页数
# self.num_pages # 总页数是django分页功能根据数据大小自动分配好的
# 如果总页数小于每页最多能显示的页码数量
# 那么就返回range(第一页到总页数+1),因为range取值是取(开头,结尾-1)
if self.num_pages < self.per_page_num:
return range(1, self.num_pages + 1) # 总页数特别多
# 当你的当前页 小于或等于,最多显示的页数的一半时,显示前五个,后五个
part = int(self.per_page_num / 2)
if self.current_page <= part:
# return range(1, part + 1)
return range(1, self.per_page_num + 1)
# 极限值:如果当前页+最多显示页数一半>总页数(超出了显示的范围)
# 返回range(总页数-最多显示的页数,总页数+1)
if (self.current_page + part) > self.num_pages:
return range(self.num_pages-self.per_page_num, self.num_pages + 1)
# if self.current_page > part:
return range(self.current_page - part, self.current_page + part + 1) def index1(request):
# 全部数据:USER_LIST=得出共有多少条数据
# 10,
# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page: page对象(是否具有下一页;是否有上一页)
current_page = request.GET.get('p') paginator = CustomPaginator(current_page, 7, USER_LIST, 10)
try:
posts = paginator.page(current_page)
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
return render(request, 'index1.html', {'posts': posts})

templates-index.html

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

pager.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> {% if posts.has_previous %}
<a href="/index1?p={{ posts.previous_page_number }}">上一页</a>
{% else %}
<a href="#">上一页</a>
{% endif %} {% for i in posts.paginator.pager_num_range %}
{% if i == posts.number %}
<a style="font-size: 30px;" href="/index1?p={{ i }}">{{ i }}</a>
{% else %}
<a href="/index1?p={{ i }}">{{ i }}</a>
{% endif %}
{% endfor %} {% if posts.has_next %}
<a href="/index1/?p={{ posts.next_page_number }}">下一页</a>
{% else %}
<a href="#">下一页</a>
{% endif %}
<span>
{{ posts.number }}/{{ posts.paginator.num_pages }}
</span> </body>
</html>

Django自定制分页功能的更多相关文章

  1. Django实现简单分页功能

    使用django的第三方模块django-pure-pagination 安装模块: pip install django-pure-pagination 将'pure_pagination'添加到s ...

  2. 利用rest-framework实现django应用的分页功能

    自定义分页的类,继承 PageNumberPagination class StandardResultsSetPagination(PageNumberPagination): page_size ...

  3. Django 之 Paginator 分页功能

    Django Paginator Django 分页官方文档  https://docs.djangoproject.com/en/1.10/topics/pagination/ 此分页方法没有限制显 ...

  4. 【原】django实现列表分页功能

    在view.py里添加分页查询方法: from django.http import JsonResponse from django.views.decorators.http import req ...

  5. python django 之 django自定制分页

    自定制的分页模块 #!/usr/bin/env python3 # V1.1 解决问题: # 1). p 参数 为 负数 与 p 参数查过总页数时报错的问题 # V1.2 解决的问题: # 1). 点 ...

  6. django内置分页功能扩展

    实现自定制页码数类型class myPaginator(Paginator): def __init__(self,curr_page,per_page_num,*args,**kwargs): se ...

  7. Django,ajax实现表格增删查改,Django内置分页功能。

    1.工程目录 2.urls.py """Django_ajax URL Configuration The `urlpatterns` list routes URLs ...

  8. django网页的分页功能,大家如果有疑问请留言

    url文件 from django.contrib import admin from django.conf.urls import url from app01 import views urlp ...

  9. django中如何实现分页功能

    1.在html页面中导入js文件和css文件 <link rel="stylesheet" href="../../../static/css/jquery.pag ...

随机推荐

  1. July 19th 2017 Week 29th Wednesday

    Rather than envy others, it is better to speed up their own pace. 与其羡慕他人,不如加快自己的脚步. The envy of othe ...

  2. 杜比(dolby)自动关闭,windows10声音自动变小

    电脑问题描述:2018.01.21 win10更新后,看视频电脑声音自动变小,重开机电脑声音正常,一会又会变小.找了很多网上的东西,实践后发现是杜比(dolby)自动关闭导致的,自动关闭的原因是因为切 ...

  3. MATLAB入门学习(整合)

    整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...

  4. websphere8 从安装到部署 测试集群应用程序 安装j2ee程序(非常详细)

    目录1. 准备安装文件2. 安装Installation Manager3. 为Installation Manager指定安装资源库4. 创建部署管理器概要文件5. 创建定制概要文件并联合到部署管理 ...

  5. ThinkPHP中前台输出变量

    1.   foreach <foreach name="list" item="vo" > {$key}|{$vo.id}:{$vo.name} & ...

  6. [19/04/01-星期一] IO技术_字节流分类总结(含字节数组(Array)流、字节数据(Data)流、字节对象(Object)流)

    一.字节流分类概括 -->1.ByteArrayInputStream /ByteArrayOutputStream(数组字节输入输出)        InputStream/OutputStr ...

  7. flex布局兼容性写法

    CSS样式 flex:定义布局为盒模型 flex-v:盒模型垂直布局 flex-1:子元素占据剩余的空间 flex-align-center:子元素垂直居中 flex-pack-center:子元素水 ...

  8. 使用npm uninstall卸载express无效

    最近在看<node.js开发指南>学习node.js,因为书是2012年的书,对应的各种软件.包的版本就特别老,其中第五章用到express,书中版本用的是2.X版本,而我这边通过npm ...

  9. java之sleep(),join(),yield(),wait(),notify()、notifyAll()区别

    1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...

  10. C/C++ Windows API——获取计算机信息 转

    转自:http://blog.csdn.net/chy555chy/article 函数 头文件 作用 GetVersionEx <windows.h> 获取系统版本信息(deprecat ...