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

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 = (
 6         (0, '展示'),
 7         (1, '不展示'),
 8     )
 9     name = models.CharField(max_length=32,verbose_name='视频方向')
10     classes = models.ManyToManyField('Classes')
11     state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name='方向状态')
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 = (
25         (0, '展示'),
26         (1, '不展示'),
27     )
28     name = models.CharField(max_length=32,verbose_name='视频分类')
29     state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name='分类状态')
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 = (
43         (0, '展示'),
44         (1, '不展示'),
45     )
46     level = (
47         (1,'初级'),
48         (2,'中级'),
49         (3,'高级'),
50     )
51     title = models.CharField(max_length=32,blank=True,verbose_name='视频标题')
52     level_id = models.SmallIntegerField(choices=level,default=1,verbose_name='视频级别')
53     state = models.SmallIntegerField(choices=state_choice,default=0,verbose_name='视频状态')
54     href = models.CharField(max_length=256,verbose_name='视频链接')
55     jianjie = models.CharField(max_length=256,verbose_name='视频简介')
56     img = models.ImageField(upload_to='./static/img/video/',null=True,verbose_name='视频图片')
57     classes = models.ForeignKey('Classes',on_delete=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

相关文章:

  • 2021-10-08
  • 2021-08-19
  • 2021-10-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-06
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-28
  • 2022-12-23
  • 2021-07-10
  • 2021-09-21
相关资源
相似解决方案