<博客建立历程>阿里云建站13——站内搜索
目录:
思路
首先确定思路,通过网页上的search窗口进行获取搜索数据searchword,然后views获取到POST进行判断searchword是否在博客的标题或者内容中,如果在的话,就放到一个list中,需要返回的值有,1.是否搜索到内容,2.搜索结果,3.searchword,页面通过判断是否搜索到内容进行不同的展示。
views.py
def blog_search(request): #按内容搜索
search_word = request.POST['searchword']
blog_list_three = BlogPost.objects.all()
search_result = []
for i in blog_list_three:
if search_word in i.title:
search_result.append(i) #append追加到list末尾
elif search_word in i.body:
search_result.append(i) #append追加到list末尾
search_status = "error" if len(search_result) == 0 else "success"
return render(request,'search.html',{'search_word':search_word,'search_result':search_result,'search_status':search_status})
urls.py
url(r'^search', views.blog_search, name='blog_search')
search.html
{% extends "blog_base.html" %}
{% load custom_markdown %}
{% block content %}
{% if search_status == %}
1{{search_status}}
2{{search_word}}
3{{search_result}}
{% endblock %}
添加的search窗口
<div class = "posts">
<section class="post">
<form action={% url 'blog_search' %} class="pure-form pure-form-stacked" method="post">
<input class="pure-input-1-4" name="searchword" type="text">
<button class="pure-button" type="submit"><a>站内搜索</a></button
</form>
窗口站内搜索
搜索结果1,2,3
优化
{% extends "blog_base.html" %}
{% load custom_markdown %}
{% block content %}
{% if search_status == 'error' %}
<div class="well fade in daytips">
<strong>作者水平有限,并没有关于<font color="red"><b>"{{ search_word }}"</b></font>的内容,请换一个词试试</strong>
</div>
{% endif %}
{% if search_status == 'success' %}
<div class="well fade in daytips">
<strong>关于<font color="red"><b>"{{ search_word }}"</b></font>的搜索结果一共有<font color="red"><b>"{{ result_length }}"</b></font>条</strong>
</div>
{% for blogs in search_result %}
<h1><a href="/blog/{{blogs.id}}">{{ blogs.title }}</a></h1>
时间:<a>{{ blogs.timestamp | date }}</a>
分类:<a class="post-category post-category-js" href="#">{{ blogs.family }}</a>
<p>{{ blogs.body |custom_markdown | truncatewords_html:"5" }}</p>
{% endfor%}
{% endif %}
{% endblock %}
预览图
这样简单的搜索就完成了,只是在博文数量大的时候性能上可能会差。