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
<div style="float: right"> <ul class="pagination"> {% if analysis_data.has_previous %} <li> <a href="?page={{ analysis_data.previous_page_number }}" aria-label="上一页"> <span aria-hidden="true">«</span> </a> </li> {% endif %} {% for index in analysis_data.page_num_list %} {% if index == analysis_data.number %} <li class="disabled"><a href="?page={{ index }}">{{ index }}</a></li> {% else %} <li class="active"><a href="?page={{ index }}">{{ index }}</a></li> {% endif %} {% endfor %} {% if analysis_data.has_next %} <li> <a href="?page={{ analysis_data.next_page_number }}" aria-label="下一页"> <span aria-hidden="true">»</span> </a> </li> {% endif %} </ul> </div