想在主页上添加一个搜索栏,来进行内容的搜索,看了网上一些文章,主要有两种
1:利用Django本身数据模型带的搜索功能,实现比较基础的搜索
2:利用第三方包来实现比较高级的搜索功能
今天先来做一下基础的搜索功能
1: 案例与界面
打个比方,我们一般搜索带文章的网站,都是搜索带“目标内容”的标题或者含有“目标内容”的文章
首先在主页上创建一个搜索表单
<form role="search" class="col" action="{% url 'mainsite:search' %}" method="get">
{% csrf_token %}
<input type="search" placeholder="请输入想要搜索的内容" name="search_info">
<button class="" type="submit">搜索</button>
</form>
这里需要注意的唯一一个地方就是,input标签里面的name,这个将会作为request一对key,value一同传入。
效果图
2:views视图函数
接下来需要我们定义怎么去搜索内容
def search(request):
search_info = request.GET.get('search_info')
error_msg=""
if not search_info:
error_msg = "您需要输入想要搜索的内容"
return render(request,'search_result.html',locals())
search_result = Article.objects.filter(article_title__icontains=search_info)
return render(request,'search_result.html',locals())
主要的逻辑就是,通过request的GET提取出search_info的内容,也就是我们搜索的内容。
如果没有搜索内容只是点击了搜索,会提示错误信息。
反之则看你搜索的内容,有多少文章的标题内含有该内容。
3: 回到前端渲染
然后我们来看一下如何渲染搜索出来的结果
{% if error_msg %}
{{ error_msg }}
{% endif %}
<div class="container">
{% for sr in search_result %}
<li>{{sr.article_title}}</li>
{% empty %}
<h3>没搜索到</h3>
{% endfor %}
</div>
如果没有搜索到结果,则会提示"没搜索到"
进行搜索 搜索结果这样,最简单的搜索功能就完成了。
当然,还可以引入Q查询来进行多条件查询,这个可以看django的文档.
参考资料:https://www.zmrenwu.com/courses/django-blog-tutorial/materials/26/
网友评论