django多条件筛选搜索.docx

上传人:牧羊曲112 文档编号:3155739 上传时间:2023-03-11 格式:DOCX 页数:11 大小:39.70KB
返回 下载 相关 举报
django多条件筛选搜索.docx_第1页
第1页 / 共11页
django多条件筛选搜索.docx_第2页
第2页 / 共11页
django多条件筛选搜索.docx_第3页
第3页 / 共11页
django多条件筛选搜索.docx_第4页
第4页 / 共11页
django多条件筛选搜索.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《django多条件筛选搜索.docx》由会员分享,可在线阅读,更多相关《django多条件筛选搜索.docx(11页珍藏版)》请在三一办公上搜索。

1、django多条件筛选搜索django多条件筛选搜索(项目实例) 多条件搜索在很多网站上都有用到,比如京东,淘宝,51cto,等等好多购物教育网站上都有,当然网上也有很多开源的比楼主写的好的多了去了,仅供参考,哈哈 先来一张效果图吧,不然幻想不出来是什么样的,前端样式很low,毕竟主要是说后台的嘛,前端为了简单测试就简单的写出来啦,喜欢好的样式可以自己去调哈 写后台的应该都知道先从数据库方面入手,所以我们先来设计数据库 数据库设计 1、视频video 复制代码 class Video(models.Model): status_choice = ( (0, u下线), (1, u上线), )

2、level_choice = ( (1, u初级), (2, u中级), (3, u高级), ) status = models.IntegerField(verbose_name=状态, choices=status_choice, default=1) level = models.IntegerField(verbose_name=级别, choices=level_choice, default=1) classification = models.ForeignKey(Classification, null=True, blank=True) weight = models.Int

3、egerField(verbose_name=权重, default=0) title = models.CharField(verbose_name=标题, max_length=32) summary = models.CharField(verbose_name=简介, max_length=32) img=models.ImageField(verbose_name=图片, upload_to=./static/images/Video/) href = models.CharField(verbose_name=视频地址, max_length=256) create_date =

4、models.DateTimeField(auto_now_add=True) class Meta: db_table = Video verbose_name_plural = u视频 def _str_(self): return self.title 复制代码 2、视频方向Direction 复制代码 class Direction(models.Model): weight = models.IntegerField(verbose_name=权重, default=0) name = models.CharField(verbose_name=名称, max_length=32)

5、classification = models.ManyToManyField(Classification) class Meta: db_table = Direction verbose_name_plural = u方向 def _str_(self): return self.name 复制代码 3、视频分类Classification 复制代码 class Classification(models.Model): weight = models.IntegerField(verbose_name=权重, default=0) name = models.CharF(verbose

6、_name=名称, max_length=32) class Meta: db_table = Classification verbose_name_plural = u分类 def _str_(self): return self.name 复制代码 好了大家一起来分析下数据库设计 视频方向Direction类和视频分类Classification多对多关系,因为一个视频方向可以有多个分类,一个视频分类也可以有多个视频方向视频分类 Classification视频分类和视频Video类是一对多关系,因为一个分类肯定有好多视频 视频Video类中level_choice 与视频也是一对多关系

7、,因为这个也就这三个分类,所以我选择把他放在内存里面取,毕竟这玩意常年不会变 url映射 复制代码 from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = url(radmin/, admin.site.urls), url(rvideo-(?Pd+)-(?Pd+)-(?Pd+).html, views.video), 复制代码 输入的url为:http:/127.0.0.1:8080/video-0-0-0.html 中间第一个0代表视频方向

8、,第二个0代表食品分类,第三个0是视频等级,这个是根据汽车之间那个二手车学的,用着很方便哈哈 0代表全部,然后递增,当选择运维自动化,第一个0就会变成1 下面那些都是一样的道理 前端代码 前端HTML,有用到django的simple_tag,从总体效果图可以看出,前端主要分为两部分,选择部分和视频展示部分 1、选择部分 复制代码 选择: % action_all current_url 1 % : % for item in direction_list % % action current_url item % % endfor % % action_all current_url 2 %

9、 : % for item in class_list % % action current_url item % % endfor % % action_all current_url 3 % : % for item in level_list % % action current_url item % % endfor % 复制代码 中间主要是用simple_tag来做的前端代码 复制代码 register.simple_tag def action_all(current_url,index): 获取当前url,video-1-1-2.html :param current_url:

10、:param item: :return: url_part_list = current_url.split(-) if index = 3: if url_part_listindex = 0.html: temp = 全部 else: temp = 全部 url_part_listindex = 0.html else: if url_part_listindex = 0: temp = 全部 else: temp = 全部 url_part_listindex = 0 href = -.join(url_part_list) temp = temp % (href,) return m

11、ark_safe(temp) register.simple_tag def action(current_url, item,index): # videos-0-0-1.html # item: id name # video- 2 -0-0.html url_part_list = current_url.split(-) if index = 3: if str(itemid) = url_part_list3.split(.)0: #如果当前标签被选中 temp = %s else: temp = %s url_part_listindex = str(itemid) + .html

12、 #拼接对应位置的部分url else: if str(itemid) = url_part_listindex: temp = %s else: temp = %s url_part_listindex = str(itemid) ur_str = -.join(url_part_list) #拼接整体url temp = temp %(ur_str, itemname) #生成对应的a标签 return mark_safe(temp) #返回安全的html 复制代码 2、视频展示区域 复制代码 视频: % for item in video_list % item.title item.s

13、ummary % endfor % 复制代码 关键来啦关键来啦,最主要的处理部分在这里,往这看,往这看,往这看,主要的事情说三遍哈 视频后台逻辑处理部分 复制代码 def video(request,*args,*kwargs): print(kwargs) # 当前请求的路径 request_path = request.path # 从数据库获取视频时的filter条件字典 q = # 状态为审核通过的 qstatus = 1 # 获取url中的视频分类id class_id = int(kwargs.get(classification_id) # 从数据库中获取所有的视频方向 dire

14、ction_list = models.Direction.objects.all.values(id,name) # 如果视频方向是0 if kwargs.get(direction_id) = 0: # 方向选择全部 # 方向id=0,即获取所有的视频分类 class_list = models.Classification.objects.all.values(id, name) # 如果视频分类id也为0,即全部分类,那就什么都不用做,因为已经全取出来了 if kwargs.get(classification_id) = 0: pass else: # 如果视频分类不是全部,过滤条件

15、为视频分类id在url中的视频分类id qclassification_id_in = class_id, else: print(方向不为0) # 方向选择某一个方向, # 如果分类是0 if kwargs.get(classification_id) = 0: print(分类为0) # 获取已选择的视频方向 obj = models.Direction.objects.get(id=int(kwargs.get(direction_id) # 获取该方向的所有视频分类 class_list = obj.classification.all.values(id, name) # 获取所有视

16、频分类对应的视频分类id id_list = list(map(lambda x: xid, class_list) # 过滤条件为视频分类id in 该方向下的所有视频分类id qclassification_id_in = id_list else: # 方向不为0,分类也不为0 obj = models.Direction.objects.get(id=int(kwargs.get(direction_id) class_list = obj.classification.all.values(id, name) id_list = list(map(lambda x:xid, clas

17、s_list) # 过滤条件为视频分类id in 已经选择的视频分类id qclassification_id_in = class_id, print(分类不为0) # 当前分类如果在获取的所有分类中,则方向下的所有相关分类显示 # 当前分类如果不在获取的所有分类中, if int(kwargs.get(classification_id) in id_list: pass else: print(不再,获取指定方向下的所有分类:选中的回到全部) url_part_list = request_path.split(-) url_part_list2 = 0 request_path = -

18、.join(url_part_list) # 视频等级id level_id = int(kwargs.get(level_id) if level_id = 0: pass else: # 过滤条件增加视频等级 qlevel = level_id # 取出相对应的视频 video_list = models.Video.objects.filter(*q).values(title,summary, img, href) # 把视频等级转化为单个标签是字典格式,整体是列表格式 ret = map(lambda x:id: x0, name: x1, models.Video.level_choice) level_list = list(ret) return render(request, video.html, direction_list: direction_list, class_list: class_list, level_list: level_list, current_url: request_path, video_list: video_list) 复制代码

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号