实现功能:用户在搜索框输入关键词,过滤出带有关键词的文章。
新闻模型如下:
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'),