博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的网站搭建: (第三天) 分页功能
阅读量:7217 次
发布时间:2019-06-29

本文共 3649 字,大约阅读时间需要 12 分钟。

hot3.png

    真的是挺久没有更新网站搭建了,因为最近在学习网络爬虫,又忙着考驾照,每一天都要练车,所以能利用的时间就只有晚上了。话不多说,直接开始了解Django的分页器吧,其实分页器的功能挺强大的,可以通过导入Paginator对象来实现文章的分页,列表的分页,还有上一页和下一页的功能。最好是参考Django的官方文档:,也可以参考之前写的,下面简单的写个例子吧

>>> from django.core.paginator import Paginator # 导入Paginator模块>>> list1=[i for i in range(0,150)] # 使用列表生成器生成一个包含150个数字的列表>>> page1=Paginator(list1,10) # 生成一个Paginator对象>>> print(page1.count) # 打印总的记录数,即列表list1的长度150>>> print(page1.num_pages) # 打印总的页数,即总记录数除以每页显示的条目数15>>> print(page1.page_range) # 页数的列表range(1, 16)>>> print(page1.page(1)) # 打印第一页的page对象
>>> page1.page(1).object_list # 打印第一页的所有记录[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> page1.page(2).object_list # 打印第二页的所有记录[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]>>> page1.page(2).next_page_number() # 打印当前的页(第2页)的下一页的页码3>>> page1.page(2).has_next() # 第2页是否有下一页True>>> page1.page(2).has_previous() # 第2页是否有上一页True>>> page1.page(2).has_other_pages() # 第2是否有其他页True>>> page1.page(2).start_index() # 第2页第一条记录的序号11>>> page1.page(2).end_index() # 第2页最后一条记录的序号20>>> page1.page(0) # 第0页是否有记录,会报错Traceback (most recent call last):  File "
", line 1, in 
    ...    raise EmptyPage(_('That page number is less than 1'))django.core.paginator.EmptyPage: 
>>> page1.page(15) # 打印第15页的对象

    后端分页功能代码 :

from django.core.paginator import Paginator #导入Paginator模块# 创建一个分页器对象,参数分别是文章列表,每页最大文章数量# 这里的EACH_RAGE_BLOG_NUMBER等于10,已经当成常量写进了seetings里paginator = Paginator(post_all_list, settings.EACH_RAGE_BLOG_NUMBER)# 采用get方式获取用户访问的页码,如果获取不到,默认为第一页page_num = request.GET.get('page', 1)# 因为用户输入不一定是数字,所以需要用int(page_num),而django里的get_page会自动识别用户输入以及页码范围# 注意这里的page_of_list是一个paginator对象page_of_list = paginator.page(int(page_num))# 获取当前页码current_page_num = page_of_list.number# 获取当前页码前后各两页的页码范围# 需要注意判断的是:如果当前页是第一页,那么前两页不能是0,也不能是-1,所以要使用内置max函数来与1比较最大值# 同理:如果当前页已经是最后一页,那么就不能取到当前页+2的页码了,所以要使用内置min函数来与最大页码比较最小值page_range = list(range(max(current_page_num - 2, 1), current_page_num)) + \    list(range(current_page_num, min(current_page_num + 2, paginator.num_pages) + 1))# 加上省略页码标记# paginator.num_pages表示一共有多少页码if page_range[0] - 1 >= 2:    page_range.insert(0, '...')if paginator.num_pages - page_range[-1] >= 2:    page_range.append('...')# 加上首页尾页# paginator.num_pages表示一共有多少页码if page_range[0] != 1:    page_range.insert(0, 1)if page_range[-1] != paginator.num_pages:    page_range.append(paginator.num_pages)

    前端代码:

    
        
  •             {# 上一页 #}            {% if page_of_list.has_previous %}                
                        
    上一页                            {% else %}                
    «            {% endif %}        
  •         {# 全部页码 #}        {# {% for page_num in page_of_list.paginator.page_range %}#}        {# page_range在views中被处理成当前页数+-2的范围,目的是为了避免页码过于长#}        {% for page_num in page_range %}            {# 判断是否当前页 #}            {% if page_num == page_of_list.number %}                {# 如果是当前页就设置active高亮 #}                
    {
    { page_num }}            {% else %}                {% if page_num == '...' %}                    
  • { { page_num }}
  •                 {% else %}                    
  • { { page_num }}
  •                 {% endif %}            {% endif %}        {% endfor %}                
  •         {# 下一页 #}        {% if page_of_list.has_next %}            
                    
    下一页                    {% else %}            
    »                
  •         {% endif %}        

            共有{

    { page_of_list.paginator.count }}篇博客,        当前第{
    { page_of_list.number }}页, 共{
    { page_of_list.paginator.num_pages }}页    

     

    转载于:https://my.oschina.net/zhenfei/blog/1933469

    你可能感兴趣的文章
    register form
    查看>>
    Java中的clone
    查看>>
    Lucene基础(2)
    查看>>
    Oracle 存储过程
    查看>>
    java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?...
    查看>>
    FlasCC发布说明
    查看>>
    如何在macOS Sierra中运行CORE Keygen破解程序
    查看>>
    终极解决方案:windows10资源管理器假死
    查看>>
    【java】一维数组循环位移方阵
    查看>>
    Essential Studio for mobile MVC中创建Razor应用程序平台教程
    查看>>
    java主函数的含义
    查看>>
    中国大学MOOC —— 学习笔记(四)
    查看>>
    访问,ringbtn,
    查看>>
    致橡树
    查看>>
    一段测试代码,哦哦哦,
    查看>>
    uiimagepickercontroller,中文,--》摘
    查看>>
    第四次作业
    查看>>
    在python中调用js或者nodejs
    查看>>
    【年终总结】2年计划还是要有的,万一实现了呢?(转自叶小钗)
    查看>>
    数字图像处理学习笔记(1.1)---位图的读写、几何变换、傅里叶变换、直方图均衡...
    查看>>