zoukankan      html  css  js  c++  java
  • 21-django-pure-pagination分页

    一、django-pure-pagination分页

      github上的描述(django-pure-pagination provides advanced pagination features and is fully compatible with existing code based on Django's core pagination module. (aka no need to rewrite code!)),意思就是说Django-pure-pagination是基于Django的核心分页模型上开发出来,更好地去开发,当然目标是唯一的,但工具是多样的,只要实现目标,那么也是可以的。如果Bootstrap(衣服)会的也可以用Bootstrap实现分页的效果图。

      要求:

      Django 1.7+

    1、在自己开发项目环境(虚拟环境下安装包):

    pip install django-pure-pagination

    或者从github上将源码克隆下来(这样可以使用最新的功能啦):

    git clone git@github.com:jamespacileo/django-pure-pagination.git
    
    cd django-pure-pagination
    
    python setup.py install

    2、安装好环境那么去Django项目中配置settings中的INSTALL_APPS里注册pure-pagination

    INSTALLED_APPS = (
        ...
        'pure_pagination',
    )

    3、接下来注册完就可以使用啦,去到视图中导入模板并查询相关数据分页:

    from pure_pagination import Paginator,EmptyPage,PageNotAnInteger
     def get(self,request):
            all_teachers = Teacher.objects.all()  
    # 对老师列表进行分页
            try:
                #取出页码值,如果没有页码值默认为1   
                page = request.GET.get("page", 1)
           #如果是字符串的话也是默认为1
            except PageNotAnInteger:
                page = 1
             #对从数据库查出来的所有对象以10个记录作为一页返回Paginator对象
            p = Paginator(all_teachers, 10, request=request)
             #对象有page方法参数是页数,返回的是对象列表和当前的页数
            teachers = p.page(page)
            #将每一页数据传入然后由模板渲染
            return render(request,"teachers-list.html",{
                "all_teachers":teachers,})    

    Paginator对象初始化:

      def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True, request=None):

    4、对模板的数据写入:

    <div class="butler_list layout">
                <div class="head">
                    <ul class="fl tab_header">
                        <li {% if sort == "" %}class="active"{% endif %}><a href="?sort=">全部</a> </li>
                        <li {% if sort == "hot" %}class="active"{% endif %}><a href="?sort=hot">人气 &#8595;</a></li>
                    </ul>
                    <div class="fr butler-num">共<span class="key">{{ all_teachers|wordcount }}</span>人&nbsp;&nbsp;&nbsp;</div>
                </div>
                     {#all_teachers.object_list这是每一条记录的遍历,all_teachers是Paginator对象的page方法,方法返回值object_list与number,然而object_list#}
               {#是每一页的所有记录,因此需要用Paginator.page对象去遍历出每条记录#} {
    % for teacher in all_teachers.object_list %} <dl class="des"> <dt> <a href="{% url "org:teacher_detail" teacher.id %}"> <div class="picpic"> <img width="100" height="100" class="scrollLoading" src="{{ MEDIA_URL }}{{ teacher.image }}"/> </div> </a> <div class="btn"> <div class="fr btn2 bdsharebuttonbox" data-text="授课教师-{{ teacher.name }}-慕学在线" data-desc="{{ teacher.points }}" data-comment="{{ teacher.name }}金牌讲师,从业年限:{{ teacher.work_years }}年" > <span class="fl">分享</span> <a href="#" class="bds_more" data-cmd="more"></a> </div> </div> </dt> <dd> <a href="{% url "org:teacher_detail" teacher.id %}"> <h1>{{ teacher.name }}<span class="key picbig">金牌讲师</span></h1> </a> <ul class="cont"> <li>工作年限:<span>{{ teacher.work_years }}年</span></li> <li>工作职位:<span>{{ teacher.work_position }}</span></li> <li>就职公司:<span>{{ teacher.work_company }}&nbsp;</span></li> <li>年龄:<span>{{ teacher.age }}岁</span></li> <li>教学特点:<span>{{ teacher.points }}</span></li> </ul> </dd> <a class="buy buyservice" href="{% url "org:teacher_detail" teacher.id %}"><br/>查看<br/>详情</a> </dl> {% endfor %} </div>

    5、模板页码操作:

     <div class="pageturn">
                <ul class="pagelist">
                    {% if all_teachers.has_previous %}
                    <li class="long"><a href="?{{ all_teachers.previous_page_number.querystring }}">上一页</a></li>
                    {% endif %}
                    {% for page in all_teachers.pages %}
                        {% if page %}
                  //all_teachers的方法number就是有Paginator对象的page方法传回 {
    % ifequal page all_teachers.number %} <li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li> {% else %} <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li> {% endifequal %} {% else %} <li class="none"><a href="">...</a></li> {% endif %} {% endfor %} {% if all_teachers.has_next %} <li class="long"><a href="?{{ all_teachers.next_page_number.querystring }}">下一页</a></li> {% endif %} </ul> </div>
  • 相关阅读:
    size_t类型
    sudo 安装 ——Debian 6
    Ubuntu10.10 上海交大及其他教育网更新源
    Linux 命令解决小问题
    VMware Player tools for linux 安装
    内核总结之内存管理api (转)
    volatile的使用
    二叉树层次遍历队列实现
    Ubuntu 11.04 下OpenCV安装
    Ubuntu 添加教育网更新源【转】
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11808426.html
Copyright © 2011-2022 走看看