组件入门搜索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>