• Python


    如果页数太多的话,全部显示在页面上就会显得很冗杂

    可以在页面中显示规定的页码数

    例如:

     book_list.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍列表</title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    </head>
    <body>
    
    <div class="container">
    
        <table class="table table-bordered">
            <thead>
            <tr>
                <th>序号</th>
                <th>id</th>
                <th>书名</th>
            </tr>
            </thead>
            <tbody>
            {% for book in books %}
                <tr>
                    <td>{{ forloop.counter }}</td>
                    <td>{{ book.id }}</td>
                    <td>{{ book.title }}</td>
                </tr>
            {% endfor %}
    
            </tbody>
        </table>
    
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <li>
                    <a href="#" aria-label="Previous">
                        <span aria-hidden="true">«</span>
                    </a>
                </li>
                <li>
                    {{ page_html|safe }}
                </li>
                <li>
                    <a href="#" aria-label="Next">
                        <span aria-hidden="true">»</span>
                    </a>
                </li>
            </ul>
        </nav>
    
    </div>
    
    </body>
    </html>
    

    views.py:

    from django.shortcuts import render
    from app01 import models
    
    
    def book_list(request):
        # 从 URL 中取参数
        page_num = request.GET.get("page")
        print(page_num, type(page_num))
        page_num = int(page_num)
    
        # 定义两个变量保存数据从哪儿取到哪儿
        data_start = (page_num-1)*10
        data_end = page_num*10
    
        # 书籍总数
        total_count = models.Book.objects.all().count()
    
        # 每一页显示多少条数据
        per_page = 10
    
        # 总共需要多少页码来显示
        total_page, m = divmod(total_count, per_page)
    
        # 页面上最多展示的页码
        max_page = 11
        half_max_page = max_page // 2
    
        # 页面上展示的页码的开始页
        page_start = page_num - half_max_page
        # 页面上展示的页码的结束页
        page_end = page_num + half_max_page
    
        # 如果当前页减一半比 1 小
        if page_start <= 1:
            page_start = 1
            page_end = max_page
        # 如果当前页加一半比总页码还大
        if page_end > total_page:
            page_end = total_page
            page_start = total_page - max_page + 1
    
        # 如果还有数据
        if m:
            total_page += 1
    
        all_book = models.Book.objects.all()[data_start:data_end]
    
        # 拼接 html 的分页代码
        html_list = []
        for i in range(page_start, page_end+1):
            tmp = '<li><a href="/book_list/?page={0}">{0}</a></li>'.format(i)
            html_list.append(tmp)
    
        page_html = "".join(html_list)
    
        return render(request, "book_list.html", {"books": all_book, "page_html": page_html})
    

    运行结果:

  • 相关阅读:
    Android:RelativeLayout相对布局(转)
    Android:LayoutInflater作用及使用(转)
    keepalive安装配置
    nginx 多级7层代理安装配置
    k8s使用cephfs
    haproxy安装及配置
    通过nodeSelector配置项实现pod部署至指定node
    SFTP使用key文件登录
    k8s使用ceph存储
    nginx开启gzip压缩后导致apk包下载不能正常安装
  • 原文地址:https://www.cnblogs.com/sch01ar/p/11329859.html
Copyright © 2020-2023  润新知