django-paginator

django 自带了一个分页的功能 ,使用起来很方便 。下面是使用方法 :

复制代码
views.py
def index(request):
    context  =  {}
    article = Article.objects.all()
    page = request.GET.get('page',1)
    context = get_paginator(article,page)
    return render(request, 'home/index.html',context)

为了让主函数不要过于复杂,将分页器的功能分离出来了。
复制代码

分页的主代码 :

复制代码
from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteger

def get_paginator(obj,page):
    page_size = 10 #每页显示的数量
    after_range_num = 5
    before_range_num = 6 
    context = {}
    try:
        page = int(page)
        if page <1 :
            page = 1 
    except ValueError:
        page = 1 
    paginator = Paginator(obj,page_size)
    try:
        obj = paginator.page(page)
    except(EmptyPage,InvalidPage,PageNotAnInteger):
        obj = paginator.page(1)
    
    if page >= after_range_num:
        page_range = paginator.page_range[page-after_range_num:page+before_range_num]
    else:
        page_range = paginator.page_range[0:int(page)+before_range_num]
    
    context["page_objects"]=obj
    context["page_range"]=page_range
    return context 
复制代码

templates 中如下实现:

复制代码
    <div id="content">
        <div id="mainbar">
            {% for article in page_objects.object_list %}
            <div class="node_article">
                <h3><a href='{% url home.views.index %}'>{{article.subject}}</a></h3>
                <p>{{article.content|safe|escape}}</p>
            </div>
            {%endfor%}
            <div>
                <p class="page_container">
                {% if page_objects.has_previous %}
                <a href="?page={{ page_objects.previous_page_number }}" title="Pre">{% trans "next page"%}</a> {% endif %}
                {% for p in page_range %}
                    {% ifequal p page_objects.number %}
                        <span style="font-size:16px;" title="当前页"><b>{{p}}</b></span>        
                        {% else %}<a href="?page={{p}}" title="第{{p}}页">{{p}}</a>{% endifequal %}
                {% endfor %}     
                {% if page_objects.has_next %}
                <a href="?page={{ page_objects.next_page_number }}" title="Next">{% trans "next page"%}</a>
                {% endif %}  
                <b>
                    {%if page_objects.paginator.num_pages%} {{ page_objects.paginator.num_pages }}{% trans "page"%}{%endif%}
                </b>
                </p>
            </div>
        </div>
    </div>
复制代码
posted @   muzinan110  阅读(320)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示