django使用url路径组合搜索
组合搜索其实就是网页中组合多个条件,对数据库中进行查询,并且将结果显示在页面中,如下:
可以看到我们红框部分,是根据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