组件搜索入门
html
<!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> {# 全部进行的判断#} {% if kwargs.classification_id == 0 %} <a class="active" href="/video-0-{{ kwargs.level_id }}-{{ kwargs.status }}.html">全部</a> {% else %} <a href="/video-0-{{ kwargs.level_id }}-{{ kwargs.status }}.html">全部</a> {% endif %} {% for item in class_list %} {% if item.id == kwargs.classification_id %} <a href="/video-{{ item.id }}-{{ kwargs.level_id }}-{{ kwargs.status }}.html" class="active">{{ item.name }}</a> {# 这里取的第一个是链接里要更换的,后面取取固定的#} {% else %} <a href="/video-{{ item.id }}-{{ kwargs.level_id }}-{{ kwargs.status }}.html">{{ item.name }}</a> {% endif %} {% endfor %} </div> <div> <a href="/video-{{ kwargs.classification_id }}-0-{{ kwargs.status }}.html">全部</a> {% for item in level_list %} {% if item.id == kwargs.level_id %} <a href="/video-{{ kwargs.classification_id }}-{{ item.id }}-{{ kwargs.status }}.html" class="active">{{ item.title }}</a> {% else %} <a href="/video-{{ kwargs.classification_id }}-{{ item.id }}-{{ kwargs.status }}.html">{{ item.title }}</a> {% endif %} {% endfor %} </div> <div> <a href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-0.html">全部</a> {% for item in status_list %} {% if item.id == kwargs.status %} <a class="active" href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-{{ item.id }}.html">{{ item.name }}</a> {% else %} <a href="/video-{{ kwargs.classification_id }}-{{ kwargs.level_id }}-{{ item.id }}.html">{{ item.name }}</a> {% endif %} {% endfor %} </div> </div> <div> <h1>结果</h1> <div> {% for row in video_list %} <div>{{ row.title }}</div> {% endfor %} </div> </div> </body> </html>
views
from django.shortcuts import render from app01 import models def video(request,*args,**kwargs): print(kwargs) condition = { # 'level_id': 0, # 'classification_id': 0, } for k,v in kwargs.items(): temp = int(v) kwargs[k] = temp if temp:#当其为0时不用进行搜索,models.Video.objects.filter(**condition),因为这等于是全部不用进行排除 condition[k] = temp class_list = models.Classification.objects.all() level_list = models.Level.objects.all() """ status_choice = ( (1, '下线'), (2, '上线'), ) """ status_list = list(map(lambda x:{'id':x[0],'name':x[1]},models.Video.status_choice)) video_list = models.Video.objects.filter(**condition)#这里的filter是寻找多个符合要求的标准,如下 # 'level_id': 0, # 'classification_id': 0, return render( request, 'video.html', { 'class_list':class_list, 'level_list':level_list, 'status_list':status_list, 'kwargs':kwargs, 'video_list':video_list, } ) 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_obj = models.Direction.objects.filter(id=direction_id).first() class_list = direction_obj.classification.all() vlist = direction_obj.classification.all().values_list('id') if not vlist: classification_id_list = [] else: classification_id_list = list(zip(*vlist))[0] if classification_id == 0: condition['classification_id__in'] = classification_id_list else: if classification_id in classification_id_list: condition['classification_id'] = classification_id else: #################指定方向:[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] 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')
urls
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'^video-(?P<class_id>(\d+))-(?P<level_id>(\d+)).html$', views.video), url(r'^video-(?P<classification_id>(\d+))-(?P<level_id>(\d+))-(?P<status>(\d+)).html$', views.video), # url(r'^video.html', views.video), url(r'^video2-(?P<direction_id>(\d+))-(?P<classification_id>(\d+))-(?P<level_id>(\d+)).html$', views.video2), ]
from django.shortcuts import render
from app01 import models
def video(request,*args,**kwargs):
print(kwargs)
condition = {
# 'level_id': 0,
# 'classification_id': 0,
}
for k,v in kwargs.items():
temp = int(v)
kwargs[k] = temp
if temp:#当其为0时不用进行搜索,models.Video.objects.filter(**condition),因为这等于是全部不用进行排除
condition[k] = temp
class_list = models.Classification.objects.all()
level_list = models.Level.objects.all()
"""
status_choice = (
(1, '下线'),
(2, '上线'),
)
"""
status_list = list(map(lambda x:{'id':x[0],'name':x[1]},models.Video.status_choice))
video_list = models.Video.objects.filter(**condition)#这里的filter是寻找多个符合要求的标准,如下
# 'level_id': 0,
# 'classification_id': 0,
return render(
request,
'video.html',
{
'class_list':class_list,
'level_list':level_list,
'status_list':status_list,
'kwargs':kwargs,
'video_list':video_list,
}
)
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_obj = models.Direction.objects.filter(id=direction_id).first()
class_list = direction_obj.classification.all()
vlist = direction_obj.classification.all().values_list('id')
if not vlist:
classification_id_list = []
else:
classification_id_list = list(zip(*vlist))[0]
if classification_id == 0:
condition['classification_id__in'] = classification_id_list
else:
if classification_id in classification_id_list:
condition['classification_id'] = classification_id
else:
#################指定方向:[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]
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')