组件入门搜索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>
浙公网安备 33010602011771号