一、前言

  我们学习一下组合搜索组件,我们在筛选内容的时候会经常用到,这边我们就来一个初版,因为这个后面还需要进行进一步优化,下面我们就来看看,我们这搜索组件是咋写的,这个东西我们会经常用到的,所以要认真的写一下,我们来根据汽车之家的效果图:

  day24-组合搜索组件

  以上是汽车之家的页面,我们也是照着汽车之家的格式写一个,写成一个,以:http://127.0.0.1:8000/article-2-4.html  这样的方式访问。

二、组合搜索组件

说明:是数据库的设置,这个里面的数据都是自己填写的,后面我们贴出来了,创建数据库之前需要执行python manage.py makemigrations和 python manage.py migrate。

from django.db import models

class Category(models.Model):
    """
    文章分类表
    """
    caption = models.CharField(max_length=16)

class ArticleType(models.Model):
    """
    文章类型表
    """
    caption = models.CharField(max_length=16)

class Article(models.Model):
    """
    文章表
    """
    title = models.CharField(max_length=32)
    content = models.CharField(max_length=255)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)
    article_type = models.ForeignKey(ArticleType,on_delete=models.CASCADE)

数据创建如下:

day24-组合搜索组件day24-组合搜索组件day24-组合搜索组件

2.2、路由的设置(urls)

说明:我们在路由里面设置两个参数,因为我们在访问的时候,通过类似:http://127.0.0.1:8000/article-2-4.html(2:文章类型id,4:文章分类id)

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path(r'^article-(?P<article_type_id>\d+)-(?P<category_id>\d+).html$',views.article,name='article')
]

2.3、article函数编写

说明:编写article函数传文章对象,文章类型和文章分类对象过去,还有前端通过 传 article_type_id 和 category_id 到前端

from django.shortcuts import render
from app01 import models

def article(request,*args,**kwargs):
    # print(kwargs) #{'category_id': '0', 'article_type_id': '0'}
    # print(request.path_info)
    # from django.urls import reverse
    # url = reverse('article',kwargs=kwargs) #用name+参数 可以生成指定url
    # print(url)
    condition = {}
    #如果显示全部的话,则显示所有文章
    for k,v in kwargs.items():
        kwargs[k] = int(v)  #需要把value的值转化为整数,跟后面的id数据类型一样
        if v == '0':
            pass
        else:
            condition[k] = v  #获取传过来的article_type_id 和 category_id
    article_type_list = models.ArticleType.objects.all()
    catagory_list = models.Category.objects.all()
    result = models.Article.objects.filter(**condition)  #两个article_type_id 和 category_id组合成一个条件帮我筛选文章
    return render(request,'article.html',
                  {
                    'result':result,
                    'article_type_list':article_type_list,  #文章类型
                    'catagory_list':catagory_list,  #文章分类
                    'arg_dict':kwargs,  #传过来的 article_type_id 和 category_id
                   }
                  )
article.py

相关文章: