zoukankan      html  css  js  c++  java
  • 分页器

    导包 分页器:from django.core.paginator import Paginator
    实例化:具体如何分页paginator = Paginator(object_list,each_page_count) 把分页器赋值给一个具体的变量 object_list具体的对象列表 each_page_count每一页放几篇文章
    具体页面:page1 = paginator.page(1) 通过paginator的page输入1得到第一页

    在shell下,shell下可以看模型具有的方法。
    from django.core.paginator import Paginator
    from blog.models import Blog
    blogs = Blog.objects.all()
    paginator = Paginator(blogs,10)
    #<string>:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'blog.models.Blog'> QuerySet.
    #最好传入的对象的模型有一个排序,否则会警告。
    #type(blogs)
    #<class 'django.db.models.query.QuerySet'>
    class Meta:
    ordering = ['-created_time']
    设置排序,之后更新迁移文件 同步数据库

    分页的使用

    前端:发送请求,请求打开具体分页内容

    后端:处理请求,返回具体分页内容响应请求

    在blog的views中,

    from django.core.paginator import Paginator

    from .models import Blog,BlogType

    def blog_list(request):

      blogs_all_list = Blog.objects.all()

      paginator = Paginator(blogs_all_list,10) #每10也进行分页

      page_num = request.GET.get('page', 1) # 获取url的页面参数(GET请求)

      page_of_blogs = paginator.get_page(page_num) #get_page可以把非法字符转换为默认值 某一页

      context = {}

      #context['blogs'] = page_of_blogs.object_list #具体返回给前端页面的东西,此处多余了,可以通过page_of_blogs获取。通过具体的页面找到它的分页器,而分页器有count属性得到全部(page_of_blogs.paginator.count)。page_of_blogs.object_list得到此页的全部10篇博客

      context['page_of_blogs'] = page_of_blogs #因为有分页所以有具体的页码信息

      在浏览器中输入,localhost:8000/blog/?page=2进入具体某一页。超出范围、0显示最后1页。无效的返回第一页。

      前端页面可以通过传过去的具体页面进行操作,page_of_blogs.paginator.page_range得到页的范围。

    依据bootsrap的分页实例写出下面分页按钮的例子:前面判断是否有上一页而显示a链接,中间遍历所有页码page_of_blogs.paginator.page_range

    ,后面判断是否有下一页。

    <div>
    <ul class="pagination">
    <li>
    {% if page_of_blogs.has_previous %}
    <a href="?page={{ page_of_blogs.previous_page_number }}" aria-label="Previous">
    <span aria-hidden="true">&laquo;</span>
    </a>
    {% else %}
    <span aria-hidden="true">&laquo;</span>
    {% endif %}
    </li>

    {% for page_num in page_of_blogs.paginator.page_range %}
    <li><a href="?page={{ page_num }}">{{ page_num }}</a></li>
    {% endfor %}

    <li>
    {% if page_of_blogs.has_next %}
    <a href="?page={{ page_of_blogs.next_page_number }}" aria-label="Next">
    <span aria-hidden="true">&raquo;</span>
    </a>
    {% else %}
    <span aria-hidden="true">&raquo;</span>
    {% endif %}

    </li>
    </ul>
    </div>
  • 相关阅读:
    实现只有0,1,2三种元素的乱序数组的排序
    请说明Request和Session的生命周期
    使用Enumeration和Iterator遍历集合类
    hive中分组取前N个值的实现
    世界知名网站的技术实现(转)
    蚂蚁变大象:浅谈常规网站是如何从小变大的(转)
    Hadoop管理员的十个最佳实践(转)
    internet笔记
    Instagram 架构分析笔记(转)
    Apache Pig入门 –介绍/基本架构/与Hive对比(转)
  • 原文地址:https://www.cnblogs.com/lag1/p/13817685.html
Copyright © 2011-2022 走看看