django实现搜索功能

实现功能:用户在搜索框输入关键词,过滤出带有关键词的文章。

新闻模型如下:

models.py

class Notices(models.Model):
    Category_List = (('新闻动态', '新闻动态'), ('通知公告', '通知公告'),)
    NoticeID=models.AutoField(primary_key=True)
    NoticeTitle=models.CharField('新闻标题',max_length=50)
    NoticeContent = UEditorField(u'内容    ', width=800, height=300, toolbars="full", imagePath="images/",filePath="files/",default='')
    NoticeData=models.DateField('时间',auto_now_add=True)
    NoticeDesc=models.CharField('新闻描述',max_length=50,blank=True)  #新闻描述
    NoticeUser=models.CharField('发布人',max_length=50,blank=True)#发布人
    #NoticeCategory = models.CharField('新闻分类',default='', max_length=10)  # 新闻分类
    NoticeCategory=models.CharField('新闻分类',choices=Category_List,default=1,max_length=10) #新闻分类
    class Meta:
        #结果集按照何种方式排序
        #ordering=['-time_added']
        #在数据库中的表名
        db_table = "std_web_notices"
        #对象的名称
        verbose_name = "新闻"
        #对象复数形式的名称
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.title

 在前端html表单进行修改:

<form role="search" method="get" id="searchform" action="{% url 'std_web:xwdt_search' %}">
  {% csrf_token %}          
  <input type="search" name="q" placeholder="标题过滤" required>        
  <button type="submit">搜索</button>

 {%csrf_token%}是django用来防御跨站请求伪造的机制。

从前端代码看到使用get方法,当用户提交搜索后,通过action找到相应的url进行跳转。

定义视图函数

views.py

def xwdt_search(request):
    q=request.GET.get('q')
    error_msg= ''
    if not q:
        error_msg='请输入关键词'
        return render(request,'jsyw/xwdt.html',{'error_msg':error_msg})
    post_list=Notices.objects.filter(NoticeTitle__icontains=q)
    return render(request, 'jsyw/xwdt.html', {'error_msg': error_msg,'post_list':post_list})

q为查询框的name   

这里的查询条件NoticeTitle__icontains=q是指NoticeTitle包含q

如果要实现两个条件查询语句可以这样写

post_list=Notices.objects.filter(NoticeCategory='新闻动态',NoticeTitle__icontains=q)

  

绑定URL

url(r'^xwdt_search/',views.xwdt_search,name='xwdt_search'),
原文地址:https://www.cnblogs.com/1998lu/p/9979290.html