组合搜索
urls.py
url(r'^movie-(?P<m_caption_id>\d+)-(?P<m_area_id>\d+)-(?P<m_time_id>\d+)/', views.movie),
1 def movie(request,*args,**kwargs): 2 conditions = {} 3 for k,v in kwargs.items(): 4 # 获取url传递的值 {'m_caption_id':'值','m_area_id':'值','m_time_id':'值'} 5 kwargs[k] = int(v) 6 7 if v == '0': 8 pass 9 else: 10 conditions[k] = v 11 #以上是定义过滤条件, 12 # 如果url:/movie-值-值-值 中的值为0,则什么都不做,即/movie-0-0-0 13 # condition还是空字典,不过滤任何条件 14 #否则将{'m_caption_id':'值','m_area_id':'值','m_time_id':'值'}加入到condition字典中 15 type = models.Movie_type.objects.all() 16 area = models.Movie_area.objects.all() 17 time = models.Movie_time.objects.all() 18 movie = models.Movie.objects.filter(**conditions) 19 20 21 return render(request,'movie.html',{'type_list':type, 22 'area_list':area, 23 'time_list':time, 24 'movie_list':movie, 25 'kwargs_dict':kwargs}) 26 #最后一句,获取当前movie-值-值-值 中的值
movie.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <style> 8 .condition a{ 9 display: inline-block; 10 margin: 5px; 11 padding: 5px; 12 border: 1px solid seagreen; 13 } 14 .condition a.active{ 15 background-color: #a6e1ec; 16 } 17 </style> 18 <body> 19 <div class="condition"> 20 <div> 21 <h5>类型</h5> 22 {% if kwargs_dict.m_caption_id == 0 %} 23 <a class='active' href="/app01/movie-0-{{ kwargs_dict.m_area_id }}-{{ kwargs_dict.m_time_id }}">全部</a> 24 {% else %} 25 <a href="/app01/movie-0-{{ kwargs_dict.m_area_id }}-{{ kwargs_dict.m_time_id }}">全部</a> 26 {% endif %} 27 28 {% for row in type_list %} 29 {% if row.id == kwargs_dict.m_caption_id %} 30 <a class='active' href="/app01/movie-{{ row.id }}-{{ kwargs_dict.m_area_id }}-{{ kwargs_dict.m_time_id }}">{{ row.caption }}</a> 31 {% else %} 32 <a href="/app01/movie-{{ row.id }}-{{ kwargs_dict.m_area_id }}-{{ kwargs_dict.m_time_id }}">{{ row.caption }}</a> 33 {% endif %} 34 {% endfor %} 35 36 37 38 <h5>地区</h5> 39 {% if kwargs_dict.m_area_id == 0 %} 40 <a class='active' href="/app01/movie-{{ kwargs_dict.m_caption_id }}-0-{{ kwargs_dict.m_time_id }}">全部</a> 41 {% else %} 42 <a href="/app01/movie-{{ kwargs_dict.m_caption_id }}-0-{{ kwargs_dict.m_time_id }}">全部</a> 43 {% endif %} 44 45 {% for row in area_list %} 46 {% if row.id == kwargs_dict.m_area_id %} 47 <a class='active' href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ row.id }}-{{ kwargs_dict.m_time_id }}">{{ row.area }}</a> 48 {% else %} 49 <a href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ row.id }}-{{ kwargs_dict.m_time_id }}">{{ row.area }}</a> 50 {% endif %} 51 {% endfor %} 52 53 54 <h5>年代</h5> 55 {% if kwargs_dict.m_time_id == 0 %} 56 <a class='active' href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ kwargs_dict.m_area_id }}-0">全部</a> 57 {% else %} 58 <a href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ kwargs_dict.m_area_id }}-0">全部</a> 59 {% endif %} 60 61 {% for row in time_list %} 62 {% if row.id == kwargs_dict.m_time_id %} 63 <a class='active' href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ kwargs_dict.m_area_id }}-{{ row.id }}">{{ row.time }}</a> 64 {% else %} 65 <a href="/app01/movie-{{ kwargs_dict.m_caption_id }}-{{ kwargs_dict.m_area_id }}-{{ row.id }}">{{ row.time }}</a> 66 {% endif %} 67 {% endfor %} 68 69 <hr> 70 <h3>搜索结果</h3> 71 <ul> 72 {% for row in movie_list %} 73 <li>{{ row.name }}----{{ row.score }}</li> 74 {% endfor %} 75 </ul> 76 </div> 77 </div> 78 </body> 79 </html>
models.py
1 class Movie_type(models.Model): 2 caption = models.CharField(max_length=16) 3 class Movie_area(models.Model): 4 area = models.CharField(max_length=16) 5 class Movie_time(models.Model): 6 time = models.CharField(max_length=32) 7 8 class Movie(models.Model): 9 name = models.CharField(max_length=16) 10 summary = models.CharField(max_length=255) 11 score = models.CharField(max_length=16) 12 m_caption = models.ForeignKey(Movie_type) 13 m_area = models.ForeignKey(Movie_area) 14 m_time = models.ForeignKey(Movie_time)