zoukankan      html  css  js  c++  java
  • django之快速分页

    本文介绍djanog两种分页,第一是普通分页,第二是使用haystack全文检索的分页。

    1.django自带分页功能,这个功能非常好用。
    基本知识点:
    Django提供了数据分页的类,这些类被定义在django/core/paginator.py中
    对象Paginator用于对列进行一页n条数据的分页运算
    对象Page用于表示第m页的数据
    Paginator对象

    方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数
    属性count:返回对象总数
    属性num_pages:返回页面总数
    属性page_range:返回页码列表,从1开始,例如[1, 2, 3, 4]
    方法page(m):返回Page对象,表示第m页的数据,下标以1开始
    Page对象

    调用Paginator对象的page()方法返回Page对象,不需要手动构造
    属性object_list:返回当前页对象的列表
    属性number:返回当前是第几页,从1开始
    属性paginator:当前页对应的Paginator对象
    方法has_next():如果有下一页返回True
    方法has_previous():如果有上一页返回True
    方法len():返回当前页面对象的个数
    迭代页面对象:访问当前页面中的每个对象
    使用示例: 普通页面中使用
    views.py文件中创建视图page_test
    视图代码:
    导入模块


    from django.core.paginator import Paginator
    from .models import *


    def index(request):
    index= int(request.GET.get('index','1'))
    blog = Post.objects.filter(published_date__isnull=False).order_by('-published_date')
    page = Paginator(blog,1) #对搜索出来的结果进行分页,一页显示一条
    blog = page.page(index) #获取第index 页的数据,这个需要前端用户点击时传过来
    context = {"blog":blog}
    return render(request,'blog/index.html',context)


    模板分页代码:
    备注:
    has_previous 判断是否有上一页
    previous_page_number 获取上一页的页码
    paginator.page_range 获取页码列表如:[1,2,3,4,5]
    has_next 判断是否还有下一页
    next_page_number 获取下一页页码
    paginator.num_pages 获取总页数

    <div class="pagenation">

    {% if blog.has_previous %}
    <a href="/?index={{ blog.previous_page_number }}" class="active">上一页</a>
    {% else %}
    <a href="/?index=1" class="active">上一页</a>

    {% endif %}

    {% for pindex in blog.paginator.page_range %}
    <a href="?index={{ pindex }}" class="active">{{ pindex }}</a>
    {% endfor %}


    {% if blog.has_next %}
    <a href="/?index={{ blog.next_page_number }}" class="active">下一页</a>
    {% else %}
    <a href="/?index={{ blog.paginator.num_pages }}" class="active">下一页</a>
    {% endif %}

    </div>


    全文检索中的分页:
    django 和haystack 版本:
    Django (1.8.7)
    django-haystack (2.6.1)

    注意:这里指的是已经实现全文检索功能后的分页操作:

    在项目目录中配置: 这个配置指的是搜索页一页多少条数据
    HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10

    seach.html 里的配置
    备注:
    query   搜索关键字,自动传到模板
    page_obj 分页后的数据,haystack 自动传到模板
    其他方法跟上面的普通页面分页一样使用。

    <div class="pagenation">

    {% if page_obj.has_previous %}
    <a href="/search/?q={{ query }}&page={{ page_obj.previous_page_number }}" >上一页</a>
    {% else %}
    <a href="/search/?q={{ query }}&page=1" >上一页</a>
    {% endif %}

    {% for pindex in page_obj.paginator.page_range %}
    {% if pindex == page.number %}
    <a href="#" class="active">{{ pindex }}</a>
    {% else %}
    <a href="/search/?q={{ query }}&page={{ pindex }}">{{ pindex }}</a>
    {% endif %}
    {% endfor %}

    {% if page_obj.has_next %}
    <a href="/search/?q={{ query }}&page={{ page_obj.next_page_number }}" >下一页</a>
    {% else %}
    <a href="/search/?q={{ query }}&page={{ page_obj.paginator.num_pages }}" >下一页</a>
    {% endif %}

    </div>

  • 相关阅读:
    【转载】ASP.NET MVC中Controller与View之间的数据传递总结
    [转载]ASP.NET MVC 2配置使用CKEditor编辑器
    一步一步学NUnit(1)
    js关闭窗口弹出对话框
    [转载]将ASP.NET MVC 2.0 部署在IIS6和IIS7上的教程
    [转载] HTTP MIME
    【转载】用ckeditor分页符结合正则表达式给文章分页
    ASP.NET MVC2中返回Json异常的解决办法
    CKEditor
    [转载].net下的生成静态页面并分页 .
  • 原文地址:https://www.cnblogs.com/huangguifeng/p/7614622.html
Copyright © 2011-2022 走看看