Django 中的分页

准备工作

  先在models中建一个Engineer类,插入一些数据。

起步

分页器对象的方法

方法描述
page 返回一个Page对象
count 返回对象列表(数据)的长度
num_pages 返回总页数
page_range 返回页码列表

Page对象的方法

方法  描述
has_next  是否有下一页
has_previous  是否有上一页
has_other_pages  是否有上一页或下一页
next_page_number  返回下一页的页码
previous_page_number  返回上一页的页码
start_index  返回当前页起始的对象序号
end_index  返回当前页结束的对象序号

views函数中的写法

from django.core.paginator import Paginator
def get_data(req,num):
    # 解析参数
    page_num = num
    # 查出所有数据
    data = Engineer.objects.all()
    # 实例化分页器
    paginator = Paginator(data,PER_PAGE)
    # 通过传过来的页码,获得page对象
    page = None
    try:
        page = paginator.page(page_num)
        # 读取page对象数据,返回给前端
        result = page.object_list
    except:
        result = []
    res = {
        'data': result,
        'page_range': paginator.page_range,
        'page':page,
        'page_count':paginator.num_pages,
           }
    return render(req,'data.html',res)

url中的路由配置

from django.conf.urls import url
from app import views

urlpatterns = [
    url(r"^get_data/(d+)",views.get_data),
]

前端页面写法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.1.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<ul>
    {% for i in data %}
        <li>{{ i.name }}的年纪是{{ i.age }}</li>
    {% empty %}
        <h1>没有数据了</h1>
    {% endfor %}
</ul>

<nav aria-label="Page navigation">
    <ul class="pagination">
        <li>
            {% if page.has_previous %}
                <a href="/app/get_data/{{page.previous_page_number }}" aria-label="Previous">
                    <span aria-hidden="true">上一页</span>
                </a>
            {% else %}
                <a href="/app/get_data/1" aria-label="Previous">
                    <span aria-hidden="true">上一页</span>
                </a>
            {% endif %}
        </li>
            {% for p in page_range %}
                <li><a href="/app/get_data/{{ p }}">{{ p }}</a></li>
            {% endfor %}
        <li>
            {% if page.has_next %}
                <a href="/app/get_data/{{ page.next_page_number }}" aria-label="Next">
                    <span aria-hidden="true">下一页</span>
                </a>
            {% else %}
                <a href="/app/get_data/{{ page_count }}" aria-label="Next">
                    <span aria-hidden="true">下一页</span>
                </a>
            {% endif %}
        </li>
    </ul>
</nav>
</body>
</html>
Fake it,till you make it
原文地址:https://www.cnblogs.com/wusir66/p/9878289.html