zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    网络协议-网络编程学习方法介绍
    socket函数集-----网络编程必备值得拥有
    QT 等待对话框/进度--
    qt部分类释义
    Unicode 10.0版本出现了,可以表达13万个字符, 99年定制的3.0版本不超过6万个字符
    hadoop+spark+mongodb+mysql+c#
    mysql 主从复制
    Docker for Windows
    项目设计&重构&性能优化
    发布项目到 Linux 上运行 Core 项目
  • 原文地址:https://www.cnblogs.com/wusir66/p/9878289.html
Copyright © 2011-2022 走看看