Python之django自带的分页功能

前端页面:

	                <div class="col-sm-6">
                    <div class="dataTables_paginate paging_simple_numbers" id="dataTables-example_paginate">
                        <ul class="pagination">

                            {% if tdata.has_previous %}
                                <li class="paginate_button previous " aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                                    <a href="?page={{ tdata.previous_page_number }}">上一页</a>
                                </li>

                             {% else %}
                                <li class="paginate_button previous disabled " aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                                    <a>上一页</a>
                                </li>
                            {% endif %}

                            {% for page in tdata.paginator.page_range %}
                                {% limit_page tdata.number page %}
                            {% endfor %}
                            {% if tdata.has_next %}
                                <li class="paginate_button previous " aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                                <a href="?page={{ tdata.next_page_number }}">下一页</a>
                                </li>

                            {% else %}
                                <li class="paginate_button previous disabled " aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                                    <a>下一页</a>
                                </li>
                            {% endif %}
                        </ul>
                    </div>
                </div>

templatetag

from  django import template
from django.utils.html import format_html


register = template.Library()

@register.simple_tag
def limit_page(current_page, pg):
    scope = abs(current_page - pg)

    if scope < 3:
        if current_page == pg:
            page_re = """<li class="paginate_button previous active"
                            aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                            <a > %s </a>
                         </li>""" % pg

        else:
            page_re = """<li class="paginate_button previous "
                            aria-controls="dataTables-example" tabindex="0" id="dataTables-example_previous">
                            <a href="?page= %s "> %s </a>
                         </li>""" % (pg, pg)
        return format_html(page_re)
    else:
        return ""

views:

        from django.core.paginator import Paginator
        from django.core.paginator import EmptyPage
        from django.core.paginator import PageNotAnInteger
	def page_t(request):
    page = request.GET.get("page")

    tdata = models.Tpage.objects.all()

    paginator = Paginator(tdata, 2)  # 每页多少条数据

    try:
        tdata = paginator.page(page)  # 返回 page(页数)的数据

    except PageNotAnInteger:
        tdata = paginator.page(1)  # 第一页

    except EmptyPage:
        tdata = paginator.page(paginator.num_pages)  # 最后一页

    return render(request, "table.html", {"tdata": tdata})
原文地址:https://www.cnblogs.com/wspblog/p/6813416.html