• 分页器


    导包 分页器: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>
  • 相关阅读:
    Android Studio 2.3.1导出jar文件不能生成release解决办法
    AndroidStudio 3.0 生成jar包的方法
    Android Studio如何打jar包
    Android Studio 如何打JAR包(修订版)
    6款程序员必备的开源中文处理工具
    Qt5.8 下链接 Mysql 错误以及解决方法(无论 Mysql 是什么版本的,64 位 Qt 要用 64 位的 Mysql 驱动,32 位的 Qt 要用 32 位的Mysql 驱动)
    Go 语言如果按这样改进,能不能火过 Java?
    基于 CSP 的设计思想和 OOP 设计思想的异同
    DELPHI下多线程编程的几个思维误区(QDAC)
    如何使用表单
  • 原文地址:https://www.cnblogs.com/lag1/p/13817685.html
Copyright © 2020-2023  润新知