Django内置分页扩展

url文件

urlpatterns = [
    path(‘admin/‘, admin.site.urls),
    path(‘index1.html/‘, views.index1),
]

views文件

from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

# Create your views here.

USER_LIST = []
for i in range(1,999):
    temp = {"name":"root"+str(i),"age":i}
    USER_LIST.append(temp)

def index(request):
    per_page_count = 10
    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]

    if current_page<=1:
        prve_pag = 1
    prve_pag = current_page -1
    next_pag = current_page +1
    return render(request,‘index.html‘,{"users":data,"prve_page":prve_pag,"next_page":next_pag})

class CustomPaginator(Paginator):
    def __init__(self,current_page,per_page_num,*args,**kwargs):
        super(CustomPaginator,self).__init__(*args,**kwargs)
        #当前页
        self.current_page = int(current_page)
        #最多显示数量
        self.per_page_num = int(per_page_num)

    def per_num_range(self):
        #如果总页数小于最多显示数量
        if self.num_pages<self.per_page_num:
            return range(1,self.num_pages+1)
        part=int(self.per_page_num/2)

        #当前页小于part(页码从领开始)
        if self.current_page <part:
            return range(1,self.per_page_num+1)
        #当前页+part大于总页数(页码最后一位已经显示出来了)
        if (self.current_page+part)>self.num_pages:
            return range(self.num_pages - self.per_pager_num + 1, self.num_pages + 1)
        return range(self.current_page - part, self.current_page + part + 1)

def index1(request):

    # 全部数据:USER_LIST,=》得出共有多少条数据
    # 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})

html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>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>

将分页代码放在include,这样分页功能就可以重用了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    {% if posts.has_previous %}
        <a href="/index1.html?p={{ posts.previous_page_number }}">上一页</a>
    {% endif %}

    {% for i in posts.paginator.per_num_range %}
        {% if i == posts.number  %}
            <a style="font-size: 30px;" href="/index1.html?p={{ i }}">{{ i }}</a>
        {% else %}
            <a href="/index1.html?p={{ i }}">{{ i }}</a>
        {% endif %}
    {% endfor %}

    {% if posts.has_next%}
        <a href="/index1.html?p={{ posts.next_page_number }}">下一页</a>
    {% endif %}

    <span>{{ posts.number }}/{{ posts.paginator.num_pages}}</span>

</body>
</html>

原文地址:https://www.cnblogs.com/lhqlhq/p/9178891.html

时间: 2024-10-04 04:15:32

Django内置分页扩展的相关文章

django -- 内置分页

urls.py from django.conf.urls import url from conn_oracle import views urlpatterns = [ url(r'^page/', views.page), ] views.py from django.shortcuts import render from conn_oracle import models from django.core.paginator import Paginator, EmptyPage, P

Django内置的分页模块

自定义分页 未封装版: 优点:直观 缺点:代码乱,不易维护,可拓展性差 data = [] for i in range(1, 302): tmp = {"id": i, "name": "alex-{}".format(i)} data.append(tmp) print(data) def user_list(request): # user_list = data[0:10] # user_list = data[10:20] try: c

Django框架进阶6 多对多三种创建方式, Ajax, Content-Type前后端传输数据编码格式, Ajax发送文件数据, django内置的序列化功能, Ajax结合sweetalert实现删除二次确认, 批量插入数据, 自定义分页器, ajax结合sweetalert实现删除二次确认

多对多三种创建方式 1.全自动(较为常用) class Book(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Author') # orm就会自动帮你创建第三张表 class Author(models.Model): name = models.CharField(max_length=32) ''' 好处:第三张表自己创建 不足之处:第三张表无法扩展额外

Django内置Admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttypes django.contrib.messages django.contrib.sessions 模板的context_processors: django.contrib.auth.context_processors.auth django.contrib.messages.context_

django 内置 admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件使用方式有 依赖APP         django.contrib.auth         django.contrib.contenttypes         django.contrib.messages         django.contrib.sessions     模板的context_processors         django.contrib.auth.context_processo

PHP内置SOAP扩展客户端的使用例子

SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展.由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端,Xmethods提供了一些有趣的选择,这里选择其中的服务,功能很简单,就是提供一个IP地址,然后返回国家名称. 先创建一个client实例: $client = new SoapClient('http://www.ecubicle.net/iptocountry.asmx?wsdl', arra

Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档

前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. 本文完整项目文件代码下载地址:完整示例 Django完整内置过滤器帮助文档:Django内置过滤器完整版 参考文献:Django 中文文档 1.8 内置过滤器 注意:所有带参数的过滤器,在使用时,冒号:和参数中间不能有空格. add加 功能: 把add后的参数num加给value: 数字相加会进行算

Django内置重置密码的功能(发邮箱)

首先我们要想用Django内置的重置密码的功能,我们要知道Django内置的函数是怎么写的 def password_reset(request, template_name='registration/password_reset_form.html', email_template_name='registration/password_reset_email.html', subject_template_name='registration/password_reset_subject.

Django内置模板标签

Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cycle 循环对象的值 debug 调试模式 extends 继承模版 filter 过滤功能 firstof 输出第一个不为False的参数 for 循环对象 for … empty 带empty说明的循环 if 条件判断 ifequal 如果等于 ifnotequal 如果不等于 ifchange