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

 

<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

 

  

 

  

posted @ 2020-01-17 12:14  Fmaj-7  阅读(182)  评论(0编辑  收藏  举报