django分页的东西, 不详细, 但是也足够了。

视图函数中的代码
from django.shortcuts import render, HttpResponse, redirect
import json
from django.core.paginator import Paginator, EmptyPage
from ajaxdemo.models import Book

def bool_list(request):
    book_list = Book.objects.all()
    # 分页器 Paginator(要进行分页的数据,每页显示几条数据)
    paginator = Paginator(book_list, 10)  # 得到总的 paginator对象

    # print("count:", paginator.count)  # 数据总数
    num_pages = paginator.num_pages  # 总页数

    # page_range = paginator.page_range  # 页码的列表
    current_page_num = int(float(request.GET.get("page", 1)))

    if num_pages > 11:
        if current_page_num - 5 < 1:
            page_range = range(1, 11)
        elif current_page_num + 5 > num_pages:
            page_range = range(num_pages - 10, num_pages + 1)
        else:
            page_range = range(current_page_num - 5, current_page_num + 6)
    else:
        page_range = paginator.page_range

    # 获取浏览器发来的关于页码的信息。 默认显示第一页. int(float())转换一下。防止用户搞个小数过来
    try:
        # 如何取到 某一页的数据
        current_page = paginator.page(current_page_num)  # 第一页的数据,返回一个可迭代页数的对象
        # for i in page:  # 遍历第一页的所有数据
        #     print(i)
        # print(current_page.object_list)  # 获取当前页所有的数据 返回QuerySet对象。包含了当前页的所有book对象
    except EmptyPage as e:  # 捕获用户输入的数字超出或者太小时,默认返回首页
        current_page = paginator.page(1)

    return render(request, "ajaxdemo/book_list.html", locals())
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script type="text/javascript" src="/static/jquery-3.3.1.js"></script>
    <title>Title</title>
    <style>
        {#.pagination > li{display: none}#}
        .pagination > li show {
            display: inline
        }
    </style>
</head>
<body>
<ul>
    {% for book in current_page %}
        <li>{{ forloop.counter }},{{ book.title }},{{ book.price }}</li>
    {% endfor %}
</ul>
<nav aria-label="Page navigation">
    <ul class="pagination">
{% if current_page.has_previous %}
    <li><a href="?page={{ current_page.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>
{% else %}
    <li class="disabled"><a href="" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>
{% endif %}


{% for page_num in page_range %}
    {% if current_page_num == page_num %}
        <li class="active"><a href="?page={{ page_num }}">{{ page_num }}</a></li>
    {% else %}
        <li><a href="?page={{ page_num }}">{{ page_num }}</a></li>
    {% endif %}
{% endfor %}


{% if current_page.has_next %}
    <li><a href="?page={{ current_page.next_page_number }}" aria-label="Next"><span aria-hidden="true">下一页</span></a></li>
{% else %}
    <li class="disabled"><a href="" aria-label="Next"><span aria-hidden="true">下一页</span></a></li>
{% endif %}
    </ul>
</nav>
</body>
</html>
前端,代码
原文地址:https://www.cnblogs.com/chengege/p/10705447.html