Django中实现博客系统搜索功能

2019/12/3 ‏‎22:44:32

简介

  1. 一个blog有搜索功能实在是再正常不过了,今天就来看看如何实现一个简单的搜索功能。
  2. 搜索就是输入关键词搜索与标题相关的文章,先构思搜索功能的一般流程:前端一个输入栏,一个搜索按钮,输入关键词,提交;后端获取关键词,再数据库中搜索标题中含有关键词的标题,然后将搜索到的结果展示到前端。大致就是这样的流程。

实现如下:


1. 搜索函数的实现:

    def search(request):
		q = request.GET.get('q')  # 获取关搜索键词
    	contexts = Article.objects.all().order_by('-pub_date')[:5]  # 获取最近五篇文章
    	search_list = Article.objects.filter(title__icontains=q)  # 根据标题所含关键词搜索
    	error_msg = 'No result'
    	return render(request, 'blog/search.html', {'search_list': search_list,
                                                'error_msg': error_msg,
                                                'contexts': contexts})

‘q’ 是前端 input 标签 name 属性的名字,稍后再说。代码第二行就是获取前端输入框里关键字。第三、四行是在数据库中查询,第三行查询所有文件,第四行查询标题中包含关键词的内容。有的文章中有判断 q 是否为空,其实完全没有必要,在前端 html 代码中会说明。


2. 数据模型的实现:

    class Article(models.Model):  
	    title = models.CharField(max_length=200)  
	    category = models.CharField(max_length=100, default='')  # 文章分类
    	body = MDTextField()
    	pub_date = models.DateTimeField('datepublished',default=timezone.now)

    	def __str__(self):  
        	return self.title 

模型中创建的几个字段,标题,分类,主体内容,发布时间。


3. 前端 html 实现:

	<form method="get" action="{% url 'blog:search' %}">
		{% csrf_token %}
        <input class="txt" type="search" name="q" placeholder="Search" required>
        <button type="submit" value="Search">Search</button>
    </form>

注意到 input 标签中 name 的值 q 与搜索方法中的 q 相同,还有一个 required,这个值说明输入该不能为空,有个这个值,后端的搜索方法中就不需要判断 q 是否为空。 action 设置 url。


4. url的实现:

	path('search/', views.search, name='search'),

5. 最后是获取的文章展示:

	{% if search_list %}
        {% for search in search_list %}
			{{ search }}
		{% endfor %}
	{% else %}
		{{ error_msg }}
	{% endif %}

搜索文章展示内容还需要一些 css 优化。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值