523rew 发表于 2016-2-3 08:27:53

Django分页:使用django.core.paginator模块

#导入模块
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage

#获取使用paginator函数分页集中sql_result,每25条为一页
#sql_result 是元组数据

paginator = Paginator(sql_result, 25)                                    
#获取分页的数量
page_sum = paginator.num_pages                                                                                       
after_range_num = 3                                                
before_range_num = 9                                             
try:                                       
      page = int(request.GET.get('page', '1'))                                                                        
except ValueError:                                                                                       
      page = 1                                                                                                         
try:   
      #建立一个触点,包含sql_result的结果,传入html,使用for语句遍历出最终结果(contacts.object_list 代替原始的sql_result)
      contacts = paginator.page(page)                                 
except PageNotAnInteger:                                             
      contacts = paginator.page(1)                                    
except EmptyPage:                                                      
      contacts = paginator.page(paginator.num_pages)                                                                                 
#页面显示数据
if page >= after_range_num:                                             
      page_range = paginator.page_range                                                      
else:                                                         
                page_range = paginator.page_range               

return render_to_response('index.html', {'contacts':contacts, 'page_sum':page_sum})               

               
               
#下面是html内容
#展现数据的方式
<table border='1' cellpadding='3' cellspacing='0' align='center'>               
      {% for row in contacts.object_list %}#使用contacts.object_list 替代sql_result                        
                <tr>
                {% for v in row %}                                                    <td>{{v}}</td>
                {% endfor %}
                </tr>
      {% endfor%}   
</table><br>


#分页栏
<span>
      {% if contacts.has_previous %}   
                <a href="?page=1">首页</a> <a href="?page={{contacts.previous_page_number}}">上一页</a>
      {% endif %}                                                               
      {% for p in page_range %}
                {% ifequal p contacts.number %}
                <span>{{p}}</span>      
                {% else %}   
                <a href="?page={{p}}">{{p}}</a>
                {% endifequal %}   
      {% endfor %}   

      {% if contacts.has_next %}                                                  #尾页转到最后页,也就是统计页数的个数                                                               
                <a href="?page={{contacts.next_page_number}}">下一页</a> <a href="?page={{page_sum}}">尾页</a>                              
      {% endif%}
</span><br><br>                                                                                 
页: [1]
查看完整版本: Django分页:使用django.core.paginator模块