django-分页(非海量数据)

views.py

class AnalysisDataHandler(View):
    def get(self, request):
        analysis_data = MonitorCenterDataAnalysis.objects.all().order_by('create_time').reverse()
        paginator = Paginator(analysis_data, 2)  # 每页显示10条数据
        num_pages = paginator.num_pages  # 总页数
        page = request.GET.get('page')
        if not page:
            page = 1
        else:
            page = int(page)
        #分页方式:以5页为基准
        #一:少于5页
            #无:页码按钮及左右侧翻页按钮都不存在
            #有:左右侧按钮至少存在一个,并且有全部页码按钮
        #二:大于等于5页
            #左侧、右侧翻页按钮至少一个存在,并且有5页码按钮
        try:
            analysis_data = paginator.page(page)

            if num_pages < 5:
                page_num_list = [i for i in range(1, num_pages+1)]
            elif page in [1, 2, 3]:
                page_num_list = [1, 2, 3, 4, 5]
            elif page in [num_pages-1, num_pages-2, num_pages]:
                page_num_list = [i for i in range(num_pages-4, num_pages+1)]
            else:
                page_num_list = [i for i in range(page-2, page+3)]
            analysis_data.page_num_list = page_num_list
        except PageNotAnInteger:
            # 如果page不是一个整数,则展示第一页。
            analysis_data = paginator.page(1)
        except EmptyPage:
            # 如果page不在范围内(例如,9999),则展示结果的最后一页。
            analysis_data = paginator.page(paginator.num_pages)

        return render(request, 'flowmgr/analysis_data.html', {'analysis_data': analysis_data})

analysis_data.html

 

    {% if analysis_data.has_previous %}
  • {% endif %} {% for index in analysis_data.page_num_list %} {% if index == analysis_data.number %}
  • {{ index }}
  • {% else %}
  • {{ index }}
  • {% endif %} {% endfor %} {% if analysis_data.has_next %}
  • {% endif %}

 

  

 

  

你可能感兴趣的:(django-分页(非海量数据))