Django mysql 分页显示_DJango 多条件查询结果分页

在学习Django中,练手做了个项目,在实际编程当中发现了N多个坑,现在记录下心得体会,方便以后查询,本人Models只使用了一张表,前端HTML如下图所示,

0ac1758746c94e9f13132d96b4dd77e9.png

多条件查询可以使用的技术:

Q查询

查询条件动态存档放到1个字典里面,前台根据字典传值。

如 status = { 'qq'  : '123456'  , 'startdate' :' 2017-02-04 ', ' typeid ' : ' 1 ' }

条件存放到字典时需要注意的是:

1、只有选中状态下,才获取查询的条件

2、页面刷新时(GET请求),即使你什么都不做,文本框的值为空字符串,所以要判断获取状态是否为真

get_qq=request.GET.get('search') #输入文本框的 name = 'search'

if get_qq: #当输入的QQ为真时,注意,刷新时,什么都不输入为空字符串

status['qq']=get_qq #==>>status={'qq':get_qq}

ee67c718106e32a805ef3e1e845348a8.png

3、如果查询条件为空时( status={}) ,模型类.objects.filter(status) 相当于xxx.objects.all()

所以第一次打开页面,或什么条件都没选择时,要设置获取的数据对象集为空

if len(status)==0: #如果字典为空,不含有任何过滤条件,即条件都没选择

data = [] #设置数据为空

else:

data =models.Order.objects.filter(**status)

# 字典 为空字符串时 status={}

#len{status}=0

#字典为None 时 status={None}

#len(status)=1 python 3.x

这里注意下  len( { } )       len( { None } )  len(None)(报错)   的区别

对查询的结果进行分页时,需要注意的是:

1、每页获取的对象 为,当前页的对象集 Paginator.page(number).object_list

而不是总数据的对象集Paginator.object_list

2、分页的页码,是总数据的页码 Paginator.page_range

3、因为分页查询,所以form 的method 设置为 GET ,每页的查询状态 在Url 上有参数

如 www.xxx.com/ ?name=lee & age=18

注意:1、每页的Url 需要传递 查询条件参数?name=lee & key=value....

2、GET 请求只能获取? 后面的数据 如果url 网址设置 www.xxx.com/1(页面)?key=value

页码需要从浏览器获取 ,需要配置视图函数和 urls.py  url(r'^list/(\d*)', list)

b035ec1c1c8b8eb9eaaa96772fb5e2a1.png

VIEWS.PY

def list(request,page):

#....

#....

else:

data =models.Order.objects.filter(**status)

if data:

p=Paginator(data,5) #分页 pre_page=1 每页显示1条数据

ret['p']=p

try:

#从浏览器中获取当前页码,默认为1

page=int(page)

page_object_list=p.page(page) #当前页面的对象

except:

#如果出错,如用户输入,ddd,返回第1页

page=1

page_object_list=p.page(1)

ret['page_object_list']=page_object_list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值