django中orm分页功能(内置分页)

本文详细介绍了在Django中使用ORM进行分页的方法,包括内置分页的使用、自定义分页的实现,以及如何优化分页功能,如处理非数字页码输入、固定显示页数和美化分页样式等。
摘要由CSDN通过智能技术生成

分批获取数据的方法

数据库方法

models.Uinfo.objects.all()[10:20]

django自带的方法

创建一个新的url
urlpatterns = [
    url(r'^index.html/', views.index),
]
创建index函数
def index(request):
    """
    分页功能
    :param request:
    :return:
    """
    user_list = models.Uinfo.objects.all()#获取到数据
    return render(request,'index.html',{'user_list':user_list})#返回到index页面上显示
创建index.html页面

在templates目录下面创建index页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <h1>用户列表</h1>
    <ul>
        {% for user in user_list %}
            <li>{
   { user.name }}</li>
        {% endfor %}

    </ul>
</body>
</html>
浏览器访问

通过浏览器访问可以看到结果都显示到了index的页面上
django中orm分页功能(内置分页)

存在的问题

通过浏览器访问,发现所有的用户都显示到了页面上,但是有一个问题,如果数据库中有上千,百万个数据,这一个页面要全部显示出来是很卡,也很不好。那么如何解决这些问题那。

给数据库添加数据

def index(request):
        #下面的for循环是给数据库中添加200条数据
    for i in range(200):
        name = "root" + str(i)
        models.Uinfo.objects.create(name=name,age=18,ut_id=1)
    user_list = models.Uinfo.objects.all()
    return render(request,'index.html',{'user_list':user_list})

在index函数里面写入上面代码后,重新浏览器访问index.html,让数据库生成上面的数据。

使用django的paginator分页
def index(request):
    """
    分页功能
    :param request:
    :return:
    """
    # for i in range(200):
    #     name = "root" + str(i)
    #     models.Uinfo.objects.create(name=name,age=18,ut_id=1)
    from django.core.paginator import Paginator,Page#导入模块
    current_pagnum = request.GET.get('page')
    user_list = models.Uinfo.objects.all()
    paginator = Paginator(user_list,10)
        #创建一个对象paginator,又有这是一个对象,所以可以通过点“.”来调用一些功能
    # per_page: 每页显示条目数量
    # count:    数据总个数
    # num_pages:总页数
    # page_range:总页数的索引范围,如: (1,10),(1,200)
    # page:     page对象
    posts = paginator.page(number=current_pagnum)#这个num就是现实当前第几页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值