zoukankan      html  css  js  c++  java
  • Django--分页功能

    Django--分页功能

    需要用到django中的Paginator模块

    导入:from django.core.paginator import Paginator

    本案例以图书管理为模版

    class BorrowBook(models.Model):
        """
        借出图书查询
        """
        reader = models.ForeignKey(Reader, on_delete=models.CASCADE)
        # manager = models.ForeignKey(Manager, on_delete=models.CASCADE)
        borrow_book = models.DateTimeField(auto_now_add=True)
        restore_book = models.DateTimeField()
        book_state = models.CharField(max_length=50)
        books = models.ForeignKey(Books, on_delete=models.CASCADE)
    

    数据库中的数据

    开始分页制作

    • 导入分页模块
      from django.core.paginator import Paginator
      
    • 查询所有数据列表queryset对象
      book_list = BorrotBook.objects.all()
      
    • 实例化对象
      paginator = Paginator(book_list, 10)
      
    • Paginator类对象的属性
      序号 属性名 说明
      1 num_pages 返回分页之后的总页数
      2 page_range 返回分页后的页码列表
    • Paginator类对象的方法
      序号 方法名 说明
      1 page(self, number) 返回第number页的page类实例对象
    • Page实例对象的属性
      序号 属性名 说明
      1 number 返回当前页的页码
      2 object_list 返回当前页的数据查询集
      3 paginator 返回对应的Paginator类对象
    • page实例对象的方法
      序号 方法名 说明
      1 has_previous 判断当前页是否有前一页
      2 has_next 判断当前页是否有下一页
      3 previous_page_number 返回前一页的页码
      4 next_page_number 返回下一页的页码

    写views函数

    # 带返回值参数的views函数
    def borrow_show(request, pindex):
        """
        已借图书查询并展示到前端页面
        """
        book_obj = BorrowBook.objects.all()  # 获取借书表中所有的数据
        book_list = []  # 创建一个空列表,存放当前登陆人所借过的书
        for i in book_obj:  # 遍历所有的借书记录,查找到当前登陆人所借的书,并放入空列表
            if i.reader.read_code == request.session["user_id"]:
                book_list.append(i)
        paginator = Paginator(book_list, 5)  # 实例化Paginator, 每页显示5条数据
        if pindex == "":  # django中默认返回空值,所以加以判断,并设置默认值为1
            pindex = 1
        else:  # 如果有返回在值,把返回值转为整数型
            int(pindex) 
        page = paginator.page(pindex)  # 传递当前页的实例对象到前端
        context = {"message": request.session["user_name"], "page": page}
        return render(request, "books/borrow_show.html", context)
    

    urls配置

    from django.urls import path
    from .import views
    
    app_name = "books"
    urlpatterns = [
        
        # 已借图书查询并展示
        path("borrow_show/<pindex>", views.borrow_show, name="borrow_show"),
        ]
    

    Html中配置

    <--当前页内容遍历展示-->
        {%for item in page%}
            <tr>
                <td width="120px">{{forloop.counter}}</td>
                <td width="150px"><a href="" style="color: #0f0f0f">										{{item.books.book_name}}</a></td>
                <td width="120px">{{item.books.book_author}}</td>
                <td width="120px">{{item.books.book_price}}</td>
                <td width="120px">{{item.books.book_concern}}</td>
                <td width="120px">{{item.books.book_type.book_type}}</td>
                <td width="120px">{{message}}</td>
                <td width="120px">{{item.borrow_book}}</td>
            </tr>
        {%endfor%}
    
    <--底部分页按钮显示-->
        <nav aria-label="Page navigation">
    		<div class="pagination">
    			<ul class="pagination">
    			{% if page.has_previous %}   # 判断当前页是否有上一页
    				<li><a href="/books/borrow_show/{{page.previous_page_number}}" aria-label="Previous">
    					<span aria-hidden="true">&laquo;</span></a></li>
                {% endif %}
    
                {% for num in page.paginator.page_range%}  # 循环遍历页码列表,并展示到底部
                	{%if pindex == page.number%}
                    	<li><a href="">{{ num }}</a></li>
                    {%else%}
                        <li><a href="/books/borrow_show/{{num}}">{{ num }}</a></li>
                    {%endif%}
                 {% endfor %}
    
                 {% if page.has_next %}  # 判断当前页是否有下一页
                     <li><a href="/books/borrow_show/{{page.next_page_number}}" aria-label="Next">
                          <span aria-hidden="true">&raquo;</span></a></li>
                  {% endif %}
           		</ul>
    		</div>
        </nav>
    

    最终效果展示

  • 相关阅读:
    PowerShell_零基础自学课程_7_Powershell中重定向机制、目录和文件管理
    volcanol_C语言学习趣事汇总贴
    linux_shell_2_shell 中的变量特性
    PowerShell_零基础自学课程_5_自定义PowerShell环境及Powershell中的基本概念
    volcanol_Linux_问题汇总系列_2_如何在linux和windows主机之间共享文件
    C语言学习趣事_你不知道的C语言应用
    volcanol_Windows_Powershell_汇总贴
    PowerShell_零基础自学课程_4_PowerShell的别名功能、错误管理功能和系统资源区域导航
    Sqlite 管理工具 SQLiteDeveloper及破解
    android建立Menu详解
  • 原文地址:https://www.cnblogs.com/donghaiming/p/11007505.html
Copyright © 2011-2022 走看看