Django 之 分页

1. urs.py

 1 # coding:utf-8
 2 from django.conf.urls import url
 3 
 4 import views
 5 
 6 urlpatterns = [
 7    
 8     # 分页练习
 9     url(r'^herolist/(\d*)$', views.herolist, name='herolist'),
10     ]

注意:第9行一定是 \d* ,\d* 表示至少0个  \d+ 表示至少一个

 

2. models.py

 1 # coding:utf-8
 2 from __future__ import unicode_literals
 3 
 4 from django.db import models
 5 
 6 class HeroInfo(models.Model):
 7     hname = models.CharField(max_length=100)    # 主要展示这个字段
 8     hgender = models.BooleanField()
 9     isDelete= models.BooleanField(default=False)
10     
11     def __str__(self):
12         return self.hname.encode('utf-8')

 

3. views.py

 1 # coding:utf-8
 2 from django.shortcuts import render
 3 from django.core.paginator import Paginator
 4 
 5 from models import BookInfo, HeroInfo
 6 
 7 def herolist(request, current_page):
 8     '''分页练习'''
 9     if not current_page:
10         current_page = 1
11     list = HeroInfo.objects.all().order_by("id")    # 一定要排序
12     paginator = Paginator(list, 5) # 每页5条记录
13     page = paginator.page(int(current_page)) # 获取第一页数据,从1开始
14     context = {'page': page}
15     return render(request, 'book/herolist.html', context)

注意:在取数据的时候要排序(例如第11行),否则可能有如下警告:

UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: 
<class 'book.models.HeroInfo'> QuerySet.

主要是因为取的数据是无序的,Paginator分页会出错

 

4. herolist.html

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 2 "http://www.w3.org/TR/html4/loose.dtd">
 3 <html>
 4     <head>
 5         <title>分页练习</title>
 6     </head>
 7     <body>
 8         <ul>
 9             {% for hero in page %}
10                 <li>{{ hero.hname }}</li>
11             {% endfor %}
12         </ul>
13         <hr>
14         {% for index in page.paginator.page_range %}
15             {% if index == page.number %}
16                 {{ index }}
17             {% else %}
18                 <a href="{% url 'herolist' index %}"> {{ index }} </a>
19             {% endif %}
20         {% endfor %}
21     </body>
22 </html>

 

5. 展示

 

posted on 2018-05-30 16:08  刘[小]倩  阅读(2638)  评论(0编辑  收藏  举报

导航