Django 实现搜索功能、分页功能和个人理解

本文详细介绍了在Django框架中实现搜索与分页功能的方法,包括如何在搜索结果中保持分页状态,以及使用Paginator类进行分页的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究django的功能,分页功能根据官方文档可以简单的实现,但是如果配合上搜索,对搜索结果分页就要稍微费点周折。

话不多少,先上代码。

一、搜索配合分页

# 获取、判断并封装关keyword键搜索
kw = request.GET.get("keyword", None)
if kw:
    # 查询商品名中只要含有关键字的都可以
    list = mod.filter(goods__contains=kw)
    mywhere.append("keyword=" + kw)
else:
    list = mod.filter()

# 获取、判断并封装商品类别typeid搜索条件
typeid = request.GET.get('typeid', '0')
if typeid != '0':
    tids = Types.objects.filter(Q(id=typeid) | Q(pid=typeid)).values_list('id', flat=True)
    list = list.filter(typeid__in=tids)
    mywhere.append("typeid=" + typeid)
# 获取、判断并封装商品状态state搜索条件
state = request.GET.get('state', '')
if state != '':
    list = list.filter(state=state)
    mywhere.append("state=" + state)

1.这里的mywhere的主要作用是为了维持搜索结果。因为如果搜索结果有多页的话,不把搜索参数传入url的话,点击换页,搜索的效果会消失。mywhere是一个列表,里面存着搜索条件。在模板页面里,换页按钮要这样写

<a href="{% url 'myadmin_goods_index' pIndex|add:1 %}{{ mywhere|join:'&' }}

这里是下一页的html代码。可以看到,url地址除了传入分页的页码,还传入了之前保存在mywhere中的搜索条件。url最后会变成http://……………….com/2?keyword=&typeid=&state=&,类似这种形式。大家可以去看看有搜索功能的网站,商城什么的,关注一下搜索关键词之后点击换页,它们的url变化,就可以理解了。

二、分页

上面讲了搜索维持分页,我又好奇分页的Paginator类。所以去看了看官方文档。分页主要是靠

Paginator.num_pages、Paginator.page、Paginator.page_range这几个方法实现的。

具体的代码,官方说明都有,我这里就不多说了。我用白话文解释一下。

Paginator类实例化之后,会得到一个含有页数的实例,通过num_pages可以得到一共的页数。
page方法有点类似yield,Paginator类实例化之后,会给每个记录一个索引,这个方法会把索引按顺序输出来。
page_range方法就是把页数按顺序输出来,结果是一个列表形式。

上面就是按照自己的理解,写的关于django的分页和搜索功能。可能有的地方讲的不对,希望大家指出。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值