Django的分頁 Paginator

>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
>>> p.count
4
>>> p.num_pages
2
>>> p.page_range
[1, 2]
>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.next_page_number()
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4
>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results

以下是一個例子:
from django.core.paginator import Paginator


def log(rq):
    logs = LogInfo.objects.all().order_by('-create_time')
    page = int(rq.GET.get('page', 1))
    pe = 4
    pf = 5
    pview = pe + pf + 1
    try:
        p = Paginator(logs, 10)  //每頁顯示10條。
        if page <= 0:
            page = 1
        if page > p.num_pages:
            page = p.num_pages
        num_pages = p.num_pages //總頁數
        part = p.page(page)  //第 page 頁的內容
        pagelist = part.object_list  //第 page 頁的內容的列表
        if part.has_previous():
            pre_num = part.previous_page_number()  //第 page 頁的前一頁
        else:
            pre_num = 0
        if part.has_next():
            next_num = part.next_page_number()  //第 page 頁的後一頁
        else:
            next_num = 0
        if page > pf:
            page_range = p.page_range[page - pf - 1:page + pe]
        else:
            page_range = p.page_range[0:pview]
    except Exception, e:
        print 'page ', e
        pagelist = []
        pre_num, next_num, page_range, num_pages = 0, 0, 0, 0


    return render_to_response("log.html", {'logs': pagelist, 'num_pages': num_pages,
                                           'page': page, 'page_range': page_range,
                                           'pre_num': pre_num,
                                           'next_num': next_num}


  <table id="logTable">
        <thead>
            <tr class="table-one">
                <th><input class="check-all" type="checkbox" value=""/></th>
                <th>操作內容</th>
                <th>操作時間</th>
            </tr>
        </thead>
        <tbody id="loglist">
            {% for log in logs %}
            <tr>
                <td><input name="sel_chk" type="checkbox"  value="{{ log.log_info_id }}" /></td>
                <td class="table-td-left" title="{{ log.operation_content }}">{{ log.operation_content }}</td>
                <td title="{{ log.create_time|date:'Y-m-d H:i:s' }}">{{ log.create_time|date:"Y-m-d H:i:s" }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>


    <a href="/logs/log_detail/?page=1">首頁</a>
    {% if pre_num > 0 %}
        <a href="/logs/log_detail/?page={{ pre_num }}>上一頁</a>
    {% endif %}
    {% for pl in page_range %}
        {% if pl %}
            {%if pl == page %}
                {{ pl }}
            {% else %}
                <a href="/logs/log_detail/?page={{ pl }}">{{ pl }}</a>
            {% endif %}
        {% endif %}
    {% endfor %}
    {% if page < num_pages %}
        <a href="/logs/log_detail/?page={{ next_num }}">下一頁</a>
    {% endif %}
    <a href="/logs/log_detail/?page={{ num_pages }}">尾頁</a>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章