组件入门搜索2

view

def video2(request,*args,**kwargs):
    condition = {}

    for k, v in kwargs.items():
        temp = int(v)
        kwargs[k] = temp
    print(kwargs) # (?P<direction_id>(\d+))-(?P<classification_id>(\d+))-(?P<level_id>(\d+))
    # 构造查询字典
    direction_id = kwargs.get('direction_id')
    classification_id = kwargs.get('classification_id')
    level_id = kwargs.get('level_id')

    direction_list = models.Direction.objects.all()

    if direction_id == 0:#列出所有分类
        class_list = models.Classification.objects.all()
        if classification_id == 0:
            pass
        else:
            condition['classification_id'] = classification_id
    else:#direction_id不等于0时
        direction_obj = models.Direction.objects.filter(id=direction_id).first()
        # print(direction_obj)
        class_list = direction_obj.classification.all()#direction_obj中id等于一个值时的Classification的所有数据
        # 获取分类列表
        vlist = direction_obj.classification.all().values_list('id')#<QuerySet [(1,), (3,), (4,)]>
        if not vlist:#当前分类没有这个方向
            classification_id_list = []
        else:
            classification_id_list = list(zip(*vlist))[0]#<1,3,4>

        if classification_id == 0:
            condition['classification_id__in'] = classification_id_list
        else:
            if classification_id in classification_id_list:#当获取的classification_id在数据库中取的值时
                condition['classification_id'] = classification_id
            else:#当不在时,直接获取数据库classification_id_list的值
                #################指定方向:[1,2,3]   分类:5
                condition['classification_id__in'] = classification_id_list

    if level_id == 0:
        pass
    else:
        condition['level_id'] = level_id

    level_list = models.Level.objects.all()

    video_list = models.Video.objects.filter(**condition)

    return render(
        request,
        'video2.html',
        {
            'direction_list':direction_list,
            'class_list':class_list,
            'level_list':level_list,
            'video_list':video_list,
        }
    )
    """
    如果:direction_id 0
        *列出所有的分类
        如果 classification_id = 0:
            pass
        else:
            condition['classification_id'] = classification_id

    否则:direction_id != 0
        *列表当前方向下的所有分类
         如果 classification_id = 0:
            获取当前方向下的所有分类 [1,2,3,4]
            condition['classification_id__in'] = [1,2,3,4]  classification_id__in可以得到多个值,在direction_id判断以后得到的值[1,2,3,4]
            models.Video.objects.filter('classification_id__in')=[1,2,3,4]
         else:
            classification_id != 0
            获取当前方向下的所有分类 [1,2,3,4]
            classification_id 是否在 [1,2,3,4]  :
                condition['classification_id'] = classification_id
            else:
                condition['classification_id__in'] = [1,2,3,4]


    """
    # models.Video.objects.filter()
    # return render(request,'video2.html')

  video2

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .condition a{
            display: inline-block;
            padding: 5px 8px;
            border: 1px solid #dddddd;
        }
        .condition a.active{
            background-color: coral;
            color: white;
        }
    </style>
</head>
<body>
    <div class="condition">
        <h1>筛选</h1>
        <div>
            {% for item in direction_list %}
                <a>{{ item.name }}</a>
            {% endfor %}
        </div>
        <div>
            {% for item in class_list %}
                <a>{{ item.name }}</a>
            {% endfor %}
        </div>
        <div>
            {% for item in level_list %}
                <a>{{ item.title }}</a>
            {% endfor %}
        </div>

    </div>
    <div>
        <h1>结果</h1>
        {% for row in video_list %}
            <div>{{ row.title }}</div>
        {% endfor %}
    </div>
</body>
</html>

  

 

posted on 2019-09-22 15:48  帅的遭人砍see  阅读(137)  评论(0编辑  收藏  举报