django实现搜索功能
Posted 1998lu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
绑定URL
url(r‘^xwdt_search/‘,views.xwdt_search,name=‘xwdt_search‘),
以上是关于django实现搜索功能的主要内容,如果未能解决你的问题,请参考以下文章
Django中使用JS通过DataTable实现表格前端分页,每页显示页数,搜索等功能
SQLite 片段函数实现不会在 TextView 中将文本格式化为 HTML
四十八 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索功能