Django数据库分页操作

[复制链接]
查看: 1948   回复: 0

307

主题

307

帖子

1714

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1714
2024-2-18 13:40:52   显示全部楼层   阅读模式  
通用封面.jpg


view.py得分页操作函数

1.简单来说就是获取总数据树数量 然后根据页面 算多少分页 传参给到html文件
def page_view(request, page=1):
    # 页码 page
    # 每页 数据数量 per_page
    per_page = 12
    # 分页功能
    # 元数据 【1,2,3,4,5,6,7,8,9,10】
    # 第一页数据  数据范围 1-5
    # 第二页数据  数据范围 5-10
    # 第几页      数据范围    数据下标范围   切片
    # page=1    1-10        [0~9]       [0~10]
    # page=2    10~20       [10~19]     [10~20]
    # page=3    20~30       [20~29]     [20~30]
    # ....
    # page=n  范围计算公式(page-1)*per_page~page*per_page

    p = person.objects.all()
    p = p[(page - 1) * per_page:page * per_page]
    pageCount = math.ceil(person.objects.count() / per_page)  # 向上取整获得总页数
    pages = range(1, pageCount + 1)
    # print(pageCount)
    return render(request, 'userPage.html', {'person': p, 'pages': pages})
其中page=pages = range(1, pageCount + 1)得作用类似js里面搞出一个从1...18总共17个数组元素对象得 数字序列数组而已,python叫元组。。学习汇总卡了疑问了一下,之后得理解



2.urls.py需要路由动态传参给函数 从动态调用显示那个分页
    path('userPage/<int:page>/', page_view, name='userPage')
尖括号里面对应得就是不同分页得页码


3.渲染页面 userPage.html  Django模板语法写法
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户分页</title>
    <style>
        ul {
            list-style: none;
            padding: 0;
        }

        .btn li {
            float: left;
            margin: 3px;
        }
    </style>
</head>
<body>
<h1>用户分页</h1>
<hr>
<ul>
    {% for p in person %}
        <li>{{ p.name }}-{{ p.age }}</li>
    {% endfor %}

</ul>
{#<p>{{ pages }}</p>#}
<hr>
<ul class="btn">

{#    <li>#}
{#        <a href='{% url 'Uapp:userPage' 3 %}'>#}
{#            <button>1</button>#}
{#        </a>#}
{#    </li>#}
    {% for page in pages %}
        <li>
            <a href='{% url 'Uapp:userPage' page %}'>
                <button>{{ page }}</button>
            </a>
        </li>
    {% endfor %}
    

</ul>
</body>
</html>
4.其次还有自动分页
a、引入自动分页依赖
from django.core.paginator import Paginator

b.书写view.py自动分页处理函数
def page_view2(request, page=1):
    per_page = 18
    alldata = person.objects.all().order_by('id')
    PageNator = Paginator(alldata, per_page)
    personData = PageNator.page(page)  # 获取第page页面得数据
    pageRange = PageNator.page_range  # 是一个属性 页码范围
    print(personData,pageRange)
    return render(request, 'userPageAuto.html', {'persons': personData, 'pages': pageRange})
c.写对渲染结果django模板语法得html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户自动分页</title>
    <style>
        ul {
            list-style: none;
            padding: 0;
        }

        .btn li {
            float: left;
            margin: 3px;
        }
    </style>
</head>
<body>
<h1>用户自动分页</h1>
<hr>
<ul>
    {% for person in persons %}
        <li>{{ person.name }}-{{ person.age }}</li>
    {% endfor %}
</ul>
<hr>
<ul class="btn">
    {% for page in pages %}
        <li>
            <a href='{% url 'Uapp:userPageAuto' page %}'>
                <button>{{ page }}</button>
            </a>
        </li>
    {% endfor %}
</ul>
</body>
</html>



回复

使用道具 举报

您需要登录后才可以回帖   登录 立即注册

高级模式

南通谢凡软件科技有限公司