django中的分页

分页的基础知识

首先我们要在views.py 文件中引入:

from django.core.paginator import Paginator

下面是详细的介绍, 其中Data 代表数据库中的数据

 d1 = Data(name='张三')
 d2 = Data(name='李四')


result = Data.objects.all()
    # 设置分页信息
    # 值1: 当前所有数据的个数
    # 值2: 每页显示多少条数据
    p = Paginator(result, 3)
    print('商品个数,', p.count)

    print('总页数', p.num_pages)

    print('页码范围', p.page_range)

    print('获取第一页', p.page(1))

    all = p.page(1).object_list
    print('第一页所有数据:', all)
    for data in all:
        print(data.name)

    for data in p.page(2).object_list:
        print(data.name)
    print('获取第二页数据')

    # 获取当前页的页码
    print(p.page(2).number)

    page2 = p.page(2)
    # 是否有上一页
    print(page2.has_previous())
    # 是否有下一页
    print(page2.has_next())
    # 除了本页面,是否有其他页面
    print(page2.has_other_pages())

    # 获取上一页页码
    print(page2.previous_page_number())
    # 获取下一页页码
    print(page2.next_page_number())

    # 指定页面内部的元素 第一个的索引
    print(page2.start_index())
    # 指定页面内容的元素, 最后一个的索引
    print(page2.end_index())

Django分页的实例

首先是创建项目,设置settings文件,新建templates文件,在里面新建index.html, 新建static 复制bootstrap那三个文件进来。 并在index.html 中通过{% load static %}引入文件, 下面的script也要引入文件。
在models文件中写入数据库的字段,最后在myPro 文件的init文件引入pymysql, 并进行数据迁移
这里放上views.py 文件, 和index.html 文件。
所有详细的解释 都是代码中响应的位置

views.py 文件:

from django.shortcuts import render
from django.http import HttpResponse
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
import random
# Create your views here.
from .models import Goods

def index(request):
    # for x in range(200):
    #     good = Goods(name='good%s' %x, des='该商品便宜,只需{}元'.format(random.randint(10,100)))
    #     good.save()
    return HttpResponse('数据添加成功')

def select(request):
    good_list = Goods.objects.all()
    # 值1: 当前所有数据的个数
    # 值2: 每页显示多少条数据
    # 值3:当最后一页数据少于n条时,将数据并入上一页
    paginator = Paginator(good_list, 12, 3)
    try:
        # GET请求方式  get()获取指定Key值所对应的Value值
        # 获取index的值 如果没有 则设置使用默认值1
        num = request.GET.get('index', '1')
        # number 表示某一页的内容
        number = paginator.page(num)

    except PageNotAnInteger:
        # 如果输入的页码数不是是整数  那么显示第一页数据
        number = paginator.page(1)

    except EmptyPage:
        # 如果页码数不在当前页码范围内 则显示最后一页
        # paginator.num_pages 获取当前总页数
        # paginator.page()获取指定的某一页
        number = paginator.page(paginator.num_pages)


        # number代表一页的内容, paginator代表所有页的内容
    return render(request, 'index.html', {'page': number, 'paginator': paginator})

index.html 文件

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="{% static 'css/bootstrap.css'%}">
    <title>Title</title>
</head>
<body>
    {% for good in page %}
        <h4>{{good.name}} -- {{good.des}}</h4>
    {% endfor%}




    <ul class="pagination">

        {% if page.has_previous %}
            {# 点击a标签 跳转到上一页链接  ?index=  为地址后面拼接的参数 #}
            <li><a href="?index={{page.previous_page_number}}">上一页</a></li>
        {% else %}
            <li class="disabled"><a href="#">上一页</a></li>
        {% endif%}



        {% for count in paginator.page_range %}
            {# count 是循环出来的数字, page.number 是某一页的页码 #}
            {% if count == page.number %}
                <li class="active"><a href="?index={{count}}">{{count}}</a></li>
            {% else %}
                <li><a href="?index={{count}}">{{count}}</a></li>
            {% endif%}

            {# 看起来是一样的,其实是若是循环出来的数字 和页码相等,#}
            {# 就是目前在那一页 那么它就被class=active 渲染。 就是页码的框的是蓝色的#}
        {% endfor%}



        {% if page.has_next %}
            <li>
                <a href="?index={{ page.next_page_number}}">下一页</a>
            </li>
        {% else %}
            <li class="disabled">
                <a href="#">下一页</a>
            </li>
        {% endif %}
    </ul>




<script src="{% static 'js/jquery.js' %}"></script>
<script src="{% static 'js/bootstrap.js' %}"></script>
</body>
</html>

最后的结果如图:
这里写图片描述

最后放上两个需要注意的地方,
这里写图片描述
static文件的作用
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值