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