Django分类查询和关键字查询以及查询后的分页

思路:分类和关键字查询分为以下几种情况:

    1、只按照分类查询

    2、值按照关键字查询

    3、分类和关键字一起查询

 

第一种情况,值按照分类查询:

我们写了一个select下拉菜单来进行选择分类,当我们选中某一个分类时,则跳转到相应的分类的商品的展示页面。

<!-- 点击类别跳转到则展示相应的分类 -->
 $("#p_type").change(function(){
    var type = $(this).val()
    location.href = '/backweb/good_list/?type='+type
 })

通过原生js通过onchange给select的option标签绑定事件,jQ中使用change对select进行事件绑定,通过$(this)拿到当前点击的标签。

将获取到分类值做为?后的参数传入视图中,在视图中先将数据通过传递的分类进行筛选,再将筛选后的数据传递到页面进行渲染。

如果我们此时还做了分页展示,则将后端处理数据时的分类值也传到页面,在我们点击分页时跳转的地址?后将分类值作为参数再次传递回后端进行处理。

 

第二种情况,只按照关键字查询:

和分类查询类似,将文本输入标签(例如text类型的input)绑定事件,获取到输入的值,将获取的值作为地址?后的参入传递到后端。在后端通过地址后的参数将数据进行模糊(constatins)筛选,再将筛选后的商品和参数传递回前端,将数据在前端进行展示

当我们点击分页时,将查询值作为参数传递回后端。

 

 

第三种情况,同时按照分类和关键字进行查询:

此时我们需要在地址?后传递两个参数,一个是分类一个是关键字,然后在后端接收参数并进行筛选

<!-- 关键字查询 -->
function select_goods(){
    var context=$('#context').val()
    var type = $('.select').val()

    if (context){
        location.href = '/backweb/good_list/?type='+type+'&context='+context
    }else{
        location.href = '/backweb/good_list/?type='+type
    }


}

分页跳转地址代码

 <a href="{% url 'backweb:good_list' %}?type={{ type_id }}&context={{ context }}&page=1">第一页</a>

 

views代码

def good_list(request):
    if request.method == 'GET':
        page_num = int(request.GET.get('page', 1))
        type = request.GET.get('type',0)
        context = request.GET.get('context','')
        # 如果拿不到分类则将type_id设置为0
        if not type:
            type_id = int(type)
        else:
            type_id = int(type)
        # 所有的分类
        type_list = FoodType.objects.all()
        # 根据相应的分类查找相应的商品
        # 如果type_id不为0则获取相应分类的商品
        if not type_id:
            goods = Goods.objects.all()
        else:
            goods = Goods.objects.filter(goods_type_id=type_id)

        # 如果有搜索条件则按照搜索条件模糊查询
        if context:
            goods = Goods.objects.filter(goods_type_id=type_id,productname__contains=context)
            if not goods:
                goods = Goods.objects.filter(goods_type_id=type_id,productname__contains=context[-1])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值