django 后端分页

分页处理脚本:

# -*- coding: utf-8 -*-

# @Time    : 2019-01-22 10:41
# @Author  : 小贰
# @FileName: page.py
# @function: 作者比较懒什么都没写

def control(current_page,page_nums):

    list_size = 5
    if page_nums<=list_size:
        page_list= list(range(1,page_nums+1))
    else:
        if (page_nums-list_size)<=list_size:
            page_list = list(range(1,page_nums+1))
        else:
            if (page_nums-current_page)<list_size:
                page_list = [1,2,"..."]+list(range(page_nums - 4, page_nums + 1))
            else:
                if current_page>list_size:
                    page_list = list(range(current_page-4, current_page + 1)) + ["...", page_nums - 1, page_nums]
                else:
                    page_list = list(range(1, list_size + 1)) + ["...", page_nums - 1, page_nums]
    return page_list

if __name__ == "__main__":
    current_page=120
    page_nums=200
    print(control(current_page,page_nums))

视图:

class OpsLog(View):
    """操作日志"""
    @method_decorator(csrf_exempt)
    @method_decorator(login_check)
    @method_decorator(perms_check)
    def dispatch(self, request, *args, **kwargs):
        return super(OpsLog,self).dispatch(request,*args, **kwargs)

    def get(self,request,page=1):
        title = "操作日志"
        audit_obj = log_db.OpsLog.objects.all().order_by("-start_time")
        pagesize = 13
        paginator = Paginator(audit_obj, pagesize)
        # 从前端获取当前的页码数,默认为1
        # 把当前的页码数转换成整数类型
        currentPage = int(page)
        page_nums = paginator.num_pages
        #获取分页信息
        page_list = pg.control(currentPage, page_nums)
        try:
            audit_list = paginator.page(page)  # 获取当前页码的记录
        except PageNotAnInteger:
            audit_list = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
        except EmptyPage:
            audit_list = paginator.page(paginator.num_pages)

        return render(request,'log_opslog.html',locals())

url配置:

urlpatterns = [
    path("opslog/<int:page>/",views.OpsLog.as_view()),
]

模板:

<div class="text-right" style="margin-top:-30px;padding-right:9%">
    <ul class="pagination" id="pager">
        <li class="previous"><a href="/log/opslog/1/">首页</a></li>
        {#上一页按钮开始#}
        {# 如果当前页有上一页#}
        {% if audit_list.has_previous %}
        {#  当前页的上一页按钮正常使用#}
        <li class="previous"><a href="/log/opslog/{{ audit_list.previous_page_number }}/">上一页</a></li>
        {% else %}
        {# 当前页的不存在上一页时,上一页的按钮不可用#}
        <li class="previous disabled"><a href="javascript:;">上一页</a></li>
        {% endif %}
        {#上一页按钮结束#}
        {# 页码开始#}
        {% for num in page_list  %}
        {% if num == currentPage %}
        <li class="item active"><a href="/log/opslog/{{ num }}/">{{ num }}</a></li>
        {% else %}
        <li class="item"><a href="/log/opslog/{{ num }}/">{{ num }}</a></li>
        {% endif %}
        {% endfor %}
        {#页码结束#}
        {# 下一页按钮开始#}
        {% if audit_list.has_next %}
        <li class="next"><a href="/log/opslog/{{ audit_list.next_page_number }}/">下一页</a></li>
        {% else %}
        <li class="next disabled"><a href="javascript:;">下一页</a></li>
        {% endif %}
        <li class="previous"><a href="/log/opslog/{{ page_nums }}/">尾页</a></li>
        {# 下一页按钮结束#}
    </ul>
</div>

效果:

原文地址:https://www.cnblogs.com/xiao2er/p/10303816.html