django之分页显示-创新互联

演示环境接上篇django。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网络空间、营销软件、网站建设、六枝网站维护、网站推广。

说明:

Django提供了一些类,来实现管理数据分页:Paginator对象、Page对象。

其中Paginator类对象介绍如下:

  Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数;

  Paginator类对象属性有:count:对象总数;num_pages:页面总数;page_range:页码列表,从1开始,例如[1, 2, 3, 4];

  Paginator类对象方法有:page(num):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常。

Page类对象介绍如下:

  Paginator对象的page()方法返回Page对象,不需要手动构造;

   Page类对象的属性有:object_list:当前页上所有对象的列表;number:当前页的序号,从1开始;paginator:当前page对象相关的Paginator对象;

   Page类对象的方法有:has_next():如果有下一页返回True;has_previous():如果有上一页返回True;has_other_pages():如果有上一页或下一页返回True;next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常;previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常;len():返回当前页面对象的个数;迭代页面对象:访问当前页面中的每个对象。

制作实验所需数据,添加mysql数据:

> use test3;
> desc bookshop_heroinfo;
+----------+---------------+------+-----+---------+----------------+
| Field    | Type          | Null | Key | Default | Extra          |
+----------+---------------+------+-----+---------+----------------+
| id       | int(11)       | NO   | PRI | NULL    | auto_increment |
| hname    | varchar(10)   | NO   |     | NULL    |                |
| hgender  | tinyint(1)    | NO   |     | NULL    |                |
| hcontent | varchar(1000) | NO   |     | NULL    |                |
| isDelete | tinyint(1)    | NO   |     | NULL    |                |
| book_id  | int(11)       | NO   | MUL | NULL    |                |
+----------+---------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)

> insert into bookshop_heroinfo(hname,hgender,book_id,hcontent,isDelete) values('郭靖',1,1,'降龙十八掌',0),('黄蓉',0,1,'打狗棍法',0),('段誉',1,1,'六脉神剑',0),('虚竹',0,1,'天山六阳掌',0),('王语嫣',1,1,'神仙姐姐',0),('令狐冲',0,1,'孤独九剑',0),('任盈盈',1,1,'弹琴',0),('岳不群',0,1,'华山剑法',0),('东方不败',1,1,'葵花宝典',0),('胡斐',0,1,'胡家刀法',0),('苗若兰',1,1,'黄衣',0),('程灵素',0,1,'医术',0),('袁紫衣',1,1,'六合拳',0);
> select * from bookshop_heroinfo;
+----+--------------+---------+-----------------+----------+---------+
| id | hname        | hgender | hcontent        | isDelete | book_id |
+----+--------------+---------+-----------------+----------+---------+
|  1 | 郭靖         |       1 | 降龙十八掌      |        0 |       1 |
|  2 | 黄蓉         |       0 | 打狗棍法        |        0 |       1 |
|  3 | 段誉         |       1 | 六脉神剑        |        0 |       1 |
|  4 | 虚竹         |       0 | 天山六阳掌      |        0 |       1 |
|  5 | 王语嫣       |       1 | 神仙姐姐        |        0 |       1 |
|  6 | 令狐冲       |       0 | 孤独九剑        |        0 |       1 |
|  7 | 任盈盈       |       1 | 弹琴            |        0 |       1 |
|  8 | 岳不群       |       0 | 华山剑法        |        0 |       1 |
|  9 | 东方不败     |       1 | 葵花宝典        |        0 |       1 |
| 10 | 胡斐         |       0 | 胡家刀法        |        0 |       1 |
| 11 | 苗若兰       |       1 | 黄衣            |        0 |       1 |
| 12 | 程灵素       |       0 | 医术            |        0 |       1 |
| 13 | 袁紫衣       |       1 | 六合拳          |        0 |       1 |
+----+--------------+---------+-----------------+----------+---------+
13 rows in set (0.00 sec)

设计以5条数据为一页,根据上述查询结果有13条数据,应该出现分为3页,每页显示5条记录且最后一页仅有3条记录;

]# cd py3/django-test1/test5

修改视图函数:

]# vim bookshop/views.py 
import os
from django.shortcuts import render
from django.http import HttpResponse
from django.conf import settings
from .models import *
from django.core.paginator import *

def herolist(request,pindex):
    if pindex == '':
        pindex = '1'
    list1 = HeroInfo.objects.all()
    paginator = Paginator(list1,5)
    page = paginator.page(int(pindex))
    context = {'page':page}
    return render(request, 'bookshop/herolist.html',context)
def index(request):
    return render(request,'bookshop/index.html')
def myExp(request):
    a1 = int('abc')
    return HttpResponse('hello_world')
def uploadPhoto(request):
    return render(request,'bookshop/uploadphoto.html')
def uploadHandle(request):
    pic1 = request.FILES['photo1']
    picName = os.path.join(settings.MEDIA_ROOT,pic1.name)
    with open(picName,'wb') as f:
        for p in pic1.chunks():
            f.write(p)
    return HttpResponse('' % pic1.name)

添加html模板:


]# vim templates/bookshop/herolist.html



    Title


        {% for hero in page %}         
  • {{ hero.hname }}
  •     {% endfor %}

{% for index in page.paginator.page_range %}     {% if index == page.number %}     {{ index }}     {% else %}     {{ index }}     {% endif %} {% endfor %}

修改url:

]# vim bookshop/urls.py 
from django.conf.urls import url
from .  import views
urlpatterns = [
    url(r'^$',views.index),
    url(r'^myexp$',views.myExp),
    url(r'^uploadphoto$',views.uploadPhoto),
    url(r'^uploadHandle$',views.uploadHandle),
    url(r'^herolist/(\d+)/$',views.herolist),
]

运行django服务器:

]# python manage.py runserver 192.168.255.70:8000

浏览器访问:http://192.168.255.70:8000/herolist/1/

注意:此代码要求第一页时,访问必须输入页号1,才能显示,否则报错。

页面显示:

django之分页显示

点击第2页,显示:

django之分页显示

点击第3页,显示:

django之分页显示

且显示的当前页没有链接的下划线。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:django之分页显示-创新互联
网页路径:http://azwzsj.com/article/csedod.html