<博客建立历程>阿里云建站13——站内搜索

时间:Nov. 28, 2016 分类:

目录:

思路

首先确定思路,通过网页上的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 %}

预览图

这样简单的搜索就完成了,只是在博文数量大的时候性能上可能会差。