Django框架实现的分页demo-创新互联

这篇文章将为大家详细讲解有关Django框架实现的分页demo,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、做网站、义安网络推广、成都微信小程序、义安网络营销、义安企业策划、义安品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供义安建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

首先初始化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,可以直接看文档.

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

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

    最终效果

    Django框架实现的分页demo

    分页优化

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

    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框架实现的分页demo就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


    当前标题:Django框架实现的分页demo-创新互联
    网页地址:http://scyanting.com/article/degghp.html

    其他资讯