8.分页器

分页器

1.视图函数

def paginator(request):
    a = Books.objects.all().order_by("pk")
    paginator1 = Paginator(a, 3)
    print("数据总数:", paginator1.count)
    print("总页数:", paginator1.num_pages)
    print("页码列表:", paginator1.page_range)
    page1 = paginator1.page(1)
    print("下一页数:", page1.next_page_number())
    print("下一页", page1.has_next())
    page2 = paginator1.page(2)
    print("上一页数:", page2.previous_page_number())
    print("上一页:", page2.has_previous())

    # 抛错
    # page=paginator.page(12)   # error:EmptyPage
    # page=paginator.page("z")   # error:PageNotAnInteger

    current_page_num = int(request.GET.get("page", 1))
    try:
        current_page = paginator1.page(current_page_num)
        print("object_list", current_page.object_list)
    except EmptyPage as e:
        current_page = paginator1.page(1)
    except PageNotAnInteger as e:
        current_page = paginator1.page(paginator1.count)

    # 需求:总页数54,使其永远只显示11页
    if paginator1.num_pages > 11:
        if current_page_num - 5 < 1:
            page_range = range(1, 12)
        elif current_page_num + 5 > paginator1.num_pages:
            page_range = range(paginator1.num_pages - 10, paginator1.num_pages + 1)
        else:
            page_range = range(current_page_num - 5, current_page_num + 6)
    else:
        page_range = paginator1.page_range

    dict1 = {
        "page_range": page_range,
        "current_page_num": current_page_num,
        "current_page": current_page,
    }

    return render(request, "paginator.html", dict1)

2.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>paginator</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<ul>
    {% for book in current_page %}
        <li>{{ 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 item in page_range %}
            {% if current_page_num == item %}
                <li class="active"><a href="?page={{ item }}">{{ item }}</a></li>
            {% else %}
                <li><a href="?page={{ item }}">{{ item }}</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>

问题1

在需要进行查询的语句中增加order_by排序
return SKU.objects.filter(category_id=category_id).order_by()

问题2

Jinja2在调用对象的方法时不同于调用Django模板引擎对象的方法,Jinja2的方法于python函数调用方法一致需要加括号
posted @   阿无oxo  阅读(22)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示