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 @ 2015-12-04 14:55  muzinan110  阅读(319)  评论(0编辑  收藏  举报