栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django框架实现的分页demo示例

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django框架实现的分页demo示例

本文实例讲述了Django框架实现的分页。分享给大家供大家参考,具体如下:

首先初始化model,建表

class Book(models.Model):
  name = models.CharField(max_length=20)
  def __str__(self):
    return self.name
  class meta:
    db_table = 'books'

然后用pycharm的数据库模块可视化插入

分页思路

url传递参数http://127.0.0.1:8000/books/?page=5比如这样传递的参数就是5,就显示第五页,

1.get到所有图书对象

2.计算好每一页应该有几个数据

3.根据不同的page值传递

def books(request):
  #取从url传递的参数
  page_num = request.GET.get('page')
  page_num = int(page_num)
  start = (page_num-1)*5
  end = page_num*5
  #总页码数是?
  per_page = 5
  total = models.Book.objects.all().count()
  total,more =divmod(total,per_page)
  if more:
    total+=1
  all_books = models.Book.objects.all()[start:end]
  #自己拼接分页的html代码
  html_str_list = []
  for i in range(1,total):
    tmp = '
  • {}
  • '.format(i,i) html_str_list.append(tmp) page_html = "".join(html_str_list) return render(request,'books.html',{'books':all_books,'total_page':total,'page_html':page_html})

    拿到数据总量的值,每一页的数量为5,如果有余数则total+1也就是增加一个页面.

    建立一个列表,去拼接a标签,最后传递给前端

    前端

    前端的样式用到了boottrap,可以直接看文档.

    
    
    
      
      书记列表
      
    
    
    
      
        {% for book in books %}
          
        {% endfor %}
        
    序号 id 书名
    {{ forloop.counter }} {{ book.id }} {{ book.name }}
    {{ page_html|safe }}
    
    

    传递过来的page_html要用safe过滤器,不然无法转移成html.

    最终效果

    分页优化

    设置一个首页一个尾页,以及显示局部的页面

    def books(request):
      # 取从url传递的参数
      page_num = request.GET.get('page')
      page_num = int(page_num)
      start = (page_num - 1) * 5
      end = page_num * 5
      # 总页码数是?
      per_page = 5
      # 页面上总共展示多少页面
      max_page = 11
      half_max_page = max_page // 2
      # 页面上展示的页面从哪开始
      page_start = page_num - half_max_page
      if page_start <= 1:
        page_start = 1
      total = models.Book.objects.all().count()
      # 页面到哪结束
      page_end = page_num+half_max_page
      if page_end > total:
        page_end = total
        page_start = total - max_page
      total, more = divmod(total, per_page)
      if more:
        total += 1
      all_books = models.Book.objects.all()[start:end]
      # 自己拼接分页的html代码
      html_str_list = []
      html_str_list.append('
  • 首页
  • '.format(1,1)) for i in range(page_start, page_end+1): tmp = '
  • {}
  • '.format(i, i) html_str_list.append(tmp) html_str_list.append('
  • 最后一页
  • '.format(total)) page_html = "".join(html_str_list) return render(request, 'books.html', {'books': all_books, 'total_page': total, 'page_html': page_html})

    希望本文所述对大家基于Django框架的Python程序设计有所帮助。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/26291.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号