当前位置:首页 > Web开发 > 正文

django使用url路径组合搜索

2024-03-31 Web开发

组合搜索其实就是网页中组合多个条件,对数据库中进行查询,并且将结果显示在页面中,如下:

技术图片

可以看到我们红框部分,是根据URL来做组合搜索的

这里是以视频为例, video-1-1-0.html 后面三位数字的含义 第一位数字: 视频方向 id 第二位数字: 视频类型 id 第三位数字: 视频难度 id

代码分析:

url.py部分,我们需要用正则匹配

re_path(^video-(?P<direction_id>\d+)-(?P<classes_id>\d+)-(?P<level_id>\d+).html,views.video) #这里有分为3组都为数字的数据direction_id(方向ID)、classes_id(类型ID)、level_id(级别难度id),会直接作为参数传递到views.video函数

解释下上面正则 1、这里的(?P<name>...) 和普通的(?...): 基本类似。区别在于,此处由于是给此group命名了,所有后续(同一正则表达式内和搜索后得到的Match对象中),都可以通过此group的名字去引用此group 2、同一正则表达式内,每个group组名是唯一的,不能重复

表结构 models.py

1 class Direction(models.Model): 2 ‘‘‘ 3 视频方向 4 ‘‘‘ 5 state_choice =http://www.mamicode.com/ ( 6 (0, 展示), 7 (1, 不展示), 8 ) 9 name = models.CharField(max_length=32,verbose_name=http://www.mamicode.com/视频方向) 10 classes = models.ManyToManyField(Classes) 11 state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name=http://www.mamicode.com/方向状态) 12 13 class Meta: 14 db_table = direction 15 verbose_name_plural = 视频方向 16 17 def __str__(self): 18 return self.name 19 20 class Classes(models.Model): 21 ‘‘‘ 22 视频类别 23 ‘‘‘ 24 state_choice =http://www.mamicode.com/ ( 25 (0, 展示), 26 (1, 不展示), 27 ) 28 name = models.CharField(max_length=32,verbose_name=http://www.mamicode.com/视频分类) 29 state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name=http://www.mamicode.com/分类状态) 30 31 class Meta: 32 db_table = classes 33 verbose_name_plural = 视频分类 34 35 def __str__(self): 36 return self.name 37 38 class Video(models.Model): 39 ‘‘‘ 40 视频信息 41 ‘‘‘ 42 state_choice =http://www.mamicode.com/ ( 43 (0, 展示), 44 (1, 不展示), 45 ) 46 level =http://www.mamicode.com/ ( 47 (1,初级), 48 (2,中级), 49 (3,高级), 50 ) 51 title = models.CharField(max_length=32,blank=True,verbose_name=http://www.mamicode.com/视频标题) 52 level_id = models.SmallIntegerField(choices=level,default=1,verbose_name=http://www.mamicode.com/视频级别) 53 state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name=http://www.mamicode.com/视频状态) 54 href = models.CharField(max_length=256,verbose_name=http://www.mamicode.com/视频链接) 55 jianjie = models.CharField(max_length=256,verbose_name=http://www.mamicode.com/视频简介) 56 img = models.ImageField(upload_to=http://www.mamicode.com/./static/img/video/,null=True,verbose_name=http://www.mamicode.com/视频图片) 57 classes = models.ForeignKey(Classes,on_delete=http://www.mamicode.com/models.CASCADE) 58 59 class Meta: 60 db_table = video 61 verbose_name_plural = 视频信息 62 63 def __str__(self): 64 return self.title

models.py

视频方向表和视频类别表是多对多关系

视频类别表和视频信息表是一对多关系

主逻辑 views.py

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/42495.html