关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
这段时间主要针对网站的UI设计进行调整和写写博客。
随着博文越来越多,发现想找某篇博文不是很方便。so ~ 是时候添加搜索博文的功能了。
1、添加网址规则
首先,先修改urls.py。
因为搜索博文实际上也是把我们想要搜索的内容提交到服务器,再返回对应的博文数据。
那么提交数据,得要有一个网址给我们提交。所以需要先分配一个网址。
因为是对博文搜索,则在blog应用对应的urls.py添加网址规则。我打算访问name为search的网址,对应的参数通过请求的GET中获取。如下所示:
url(r'^search$','blog.views.search',name='search'),
2、添加访问函数
设置网址规则之后,需要写对应的函数:blog.views.search。打开blog应用下对应的views.py文件,添加如下函数:
def search(request):
"""show blogs' list"""
try:
wd=request.GET['wd']
if not wd:
return index(request)
blogs = Blog.objects.filter(caption__contains=wd)
paginator,blogs=getPages(request,blogs)
#return data
data = commonData()
data["blogs"]=blogs
data["paginator"]=paginator
data["wd"]=wd
except Exception:
raise Http404
return render_to_response('blog/blog_search.html',data)有几点要说明一下:
1) 获取搜索关键字的是wd参数
2) 没有对应搜索内容返回blog默认列表(前面有些index函数)
3) commonData()是我这个文件后面定义的一个获取公告数据的函数,可以忽略
4) getPages()是我封装起来的获取分页器函数,可以忽略。具体可以看前面的博文:Django分页器
5) 设置条件是对博客caption字段模糊搜索,需要加 __contains 修饰,表示子字符串。
3、添加对应的模版文件呈现数据
在前面优化期间,添加了tag标签筛选。由于比较简单,这部分没有写出来。大体类似,只供参考。
在blog应用模版文件夹的位置,新建blog_search.html文件。模版文件内容如下:
{% extends "blog/blog_list.html" %}
{% block title %}
“{{wd}}” - 杨仕航的博客
{% endblock %}
{% block blog_header %}
<div class="alert alert-success" role="alert">
关键字:“{{wd}}” 所有博文
</div>
{% endblock %}该模版还调用了博客列表模版,可以省很多事。传递进来的博客列表内容,会在blog_list.html文件中处理。
4、添加搜索框
万事俱备只欠东风。后台数据都准备好之后,给菜单栏添加搜索框。这个搜索框其实是一个Form表单。
我网站用了bootstrap框架。相关的教程可以看看宁皓网的视频教程其中的“导航”章节。大致代码如下:
<form action="{% url 'search'%}" class="navbar-form navbar-right">
<input name="wd" type="text" placeholder="搜索博文" class="form-control">
<button type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</form>设置表单提交给名字为search的网址;表单字段为name="wd"。这些都是相关的html知识,这里就不多说。
你也可以看上面的宁皓网教程。
5、添加样式
最好,再稍微调整一下css样式即可。
.navbar-form{
position: relative;
right: 10px;
}
.navbar-form button[type="submit"]{
position: absolute;
top:24%;
right: 20px;
background:none;
border:none;
}
@media (max-width: 767px){
.navbar-form button[type="submit"]{
top:35%;
}
}同样,这些内容可以在宁皓网的教程里面找到(“导航”章节)。
这样就添加了搜索博文功能。不过搜索能力不强,只对博文标题模糊搜索。不支持多关键字什么的,后面再慢慢完善。