AI智能
改变未来

Django个人博客搭建–9–按标题搜索文章


前言:

可以看到,我的导航条上有一个搜索框

这个搜索框可以用来按照标题搜索文章并展示文章详情页,当我们输入了一个有在数据库里的文章标题,点击搜索之后可以跳转到文章详情页。如果没有这篇文章,就跳转回首页,并在框里显示

find_nothing

的字体,OK话不多说,开干!

功能分析:

显然,这个功能不难实现,有了前面注册登录的基础,这个功能其实查不了多少,都是将输入框的数据以

post

的方式传递给后台,再在后台通过filter方法去对象列表,然后在详情页进行显示
至于在

输入框placeholder显示find_nothing

,这个因为需要用到重定向,而重定向没有办法像render那样用字典的方法传值,网上的方法有两种:

  1. 把要传给前端的数据存在缓存中
  2. 把要传给前端的数据以get的方法放在url上

用缓存的方法很方便,而且url干净,不带其他的东西,但是他毕竟是个缓存数据,就像登录信息一样,他会保留一段时间,当你暂时不需要搜索东西,并跑到其他页面的时候,那个find_nothing还是会显示在输入框上面,这显然并不是我们想要的,我们需要的是查找不到的时候才跳出那个字,并对其他页面没有影响
所以,我果断选了get方法传值

代码实现:

def sousuo(request):try:sou = request.POST.get(\'sousuo\')if request.method == \'POST\':article = Article.objects.filter(title=sou)if article.exists():detail_info = article[0]else:return redirect(\'/?error=find_nothing\')denglu = request.session.get(\'name\', \'游客\')return render(request, \'blogmuban/xiangqing.html\', {\'detail_info\':detail_info,\'denglu\':denglu})except Exception as e:print(e)

如代码:我用filter方法取出标题含有搜索框内容的数据,这里无论有没有这个数据,filter方法都会存入article,然后再来判断这个指是否存在,由于article是一个对象列表,所以有

detail_info = article[0]

如果article不存在,我们就重定向到首页,然后开始我上面说的get方法传值:

return redirect(\'/?error=find_nothing\')

这样如果我们我们在输入框输入一个错误值,我们的路由就很显示这个:

那么如何在前端拿到find_nothing这个字呢?

placeholder=\"{{ request.GET.error }}\"

把placeholder里面的东西写成这个就行了

如果大家有什么更好的重定向传值方法还请在评论区批评指正

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Django个人博客搭建–9–按标题搜索文章