Django中扩展Paginator实现分页

最近在使用django开发移动web,遇到分页问题,开始不是很懂,故自己写下来,加些注释,方便别人理解


views.py视图

from django.core.paginator import Paginator
from django.core.paginator import EmptyPage
from django.core.paginator import PageNotAnInteger

def index(request):
	new_list = playerInfo.objects.order_by('-pi_datetime').all()  #获取数据数据
	paginator = Paginator(new_list, 4)          #每页4个按需修改
	page = request.GET.get('page')   #‘page'为页面传参,如index/?page=2,后面html还会提到对应位置
	try:
		topics = paginator.page(page)
	except PageNotAnInteger:              #非整数让跳转到第一分页
		topics = paginator.page(1)
	except EmptyPage:                     
		topics = paginator.page(paginator.num_pages)
	return render(request,'web/index.html',{'topics': topics})
<!-- html部分-->
<!--使用了模板,我只写block的部分,下面为正文-->
{% block topics %}
<!--在这个位置,开始受看的文章影响,以为要topics.paginator.object_list之类的,
    后来发现完全不需要,加了反而所有数据都出来了,数据就不能分页了-->
{% for mem in topics %}  
    <!--这里可以正常使用显示数据了,只有分页的数据-->
    {{ men.title }}
{% endfor %}
{% endblock %}

<!--分页按钮,思想在这,特效自己按需实现,下面有两种,照搬原文章的了-->
<!-- 第一种分页显示方式 --><p>
  {# topics.paginator.page_range 这个函数返回包含一个所有页码数的 range 对象 #}
  {# 即 range(1, topics.paginator.num_pages + 1) #}
  {% for page_number in topics.paginator.page_range %}
    {% ifequal page_number  topics.number %}
      {{ page_number }}
    {% else %}
      <!--加个注释,下面的?page=,就是页面传参了,views.py里的’page'就是这样获取的-->
      <a href="?page={{ page_number }}">{{ page_number }}</a>   
    {% endifequal %}
  {% endfor %}</p>
  
  <!-- 另一种分页显示方式 -->
  <p>
  {% if topics.has_previous %}
      <a href="?page={{ topics.previous_page_number }}">Previous</a>
  {% endif %}
  {# topics.paginator.number_pages 返回总页数 #}
  Page {{ topics.number }} of {{ topics.paginator.num_pages }}.
  {% if topics.has_next %}
      <a href="?page={{ topics.next_page_number }}">Next</a>
  {% endif %}
  </p>


你可能感兴趣的:(django分页)