• django -- 分页功能


    自带分页功能 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

    • [x] views.py
    from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
    def pageinator(request, Iterable, per_page, m):
        # django原生pageinator分页
        # Iterable 可迭代对象
        # per_page 每页多少个
        # m 小于等于这个数量的合并到上一页
        paginator = Paginator(Iterable, per_page, m)  
    
        page = request.GET.get('page')
        try:
            Iterable = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            Iterable = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            Iterable = paginator.page(paginator.num_pages)
        return Iterable
    
    class MyOrderView(View):
        my_order = OrderMessage.objects.all()
        orders = orders = pageinator(request, my_order, 5, 3)
        return render(request, 'order.html', locals())
    
    • [x] 前端页面order.html
        <div class="pagination" style="text-align:center;display: block;">
            <span class="step-links">
                {% if orders.has_previous %}
                    <a href="?page={{ orders.previous_page_number }}">上一页</a>
                {% endif %}
    
                {% for pg in orders.paginator.page_range %}
                    {% if orders.number == pg %}
                        <span class="active"><a href="?page={{ pg }}">{{ pg }}</a></span>
                    {% else %}
                        <span class=""><a href="?page={{ pg }}">{{ pg }}</a></span>
                    {% endif %}
                {% endfor %}
    
                {% if orders.has_next %}
                    <a href="?page={{ orders.next_page_number }}">下一页</a>
                {% endif %}
            </span>
        </div>
    

    • 第三方模块django-pure-pagination实现分页

    • [x] views.py

    from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
    
    def pure_page(request, objects, per_page=7):
        # django-pure-pagination模块
        p = Paginator(objects, per_page, request=request)
        try:
            page = request.GET.get('page', 1)
            if not page:
                page = 1
        except PageNotAnInteger:
            page = 1
        except EmptyPage:
            page = p.num_pages
    
        obj = p.page(page)
        return obj
        
    
    class MyOrderView(View):
        my_order = OrderMessage.objects.all()
        orders = pure_page(request, orders, 10)
        return render(request, 'order.html', locals())
    
    • [x] order.html, 不能直接用orders来迭代, 要用orders.object_list
    
    {% for m in orders.object_list %}
        {{ m.xxx }}
    {% endfor %}
    
    
    <!------ 分页 ------>
    {% if orders %}
        <div class="pagination" style="text-align: center;display: block;">
        <span class="step-links">
            {% if orders.has_previous %}
                <a href="?{{ orders.previous_page_number.querystring }}" class="prev"
                   style="margin: 0 10px;">上一页</a>
            {% endif %}
    
            {% for page in orders.pages %}
                {% if page %}
                    {% ifequal page orders.number %}
                        <span class="active"><a href="javascript:void(0)"
                                                style="margin: 0 5px;display: inline-block;padding: 3px 9px;color: #fff;border: #aae 1px solid;background: #26b;">{{ page }}</a></span>
                    {% else %}
                        <span><a href="?{{ page.querystring }}" class="page"
                                 style="margin: 0 5px;display: inline-block;padding: 3px 9px;color: #15b;border: #aae 1px solid;">{{ page }}</a></span>
                    {% endifequal %}
                {% else %}
                    <span><a href="">...</a></span>
                {% endif %}
            {% endfor %}
    
            {% if orders.has_next %}
                <a href="?{{ orders.next_page_number.querystring }}" style="margin: 0 10px;">下一页</a>
            {% endif %}
        </span>
        </div>
    {% else %}
        <div class="noMessage order_noMessage" style="display: block;">
            <p>没有查询到符合条件的记录!</p>
        </div>
    {% endif %}
    
    夜来风雨声, 代码码多少?
  • 相关阅读:
    Android之打包签名
    on a null object reference 问题的解决办法
    Android Fragment使用小结及介绍
    Android开发重点难点:RelativeLayout(相对布局)详解
    Android的学习第六章(布局一LinearLayout)
    与adb相关的问题,比如掉线问题、Android Studio 提示Session 'app':Error Installing APK、找不到设备
    Android LitePal介绍与使用说明
    学习进度条-10
    《梦断代码》阅读笔记03
    用户模板和用户场景
  • 原文地址:https://www.cnblogs.com/belic/p/8092888.html
Copyright © 2020-2023  润新知