导读:很多朋友问到关于django怎么写搜索框的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
求助django 实现前端页面检索功能的代码
设我们的 django 博客应用有如下的文章模型:
blog/models.pyclass Post(models.Model):
# 标题
title = models.CharField(max_length=70)
# 正文
body = models.TextField()
# 其他属性
def __str__(self):
return self.title
先看到第 1 步,用户在搜索框输入搜索关键词,因此我们要在博客上为用户提供一个搜索表单,html 表单代码大概像这样:
form method="get" action="/search/"
{% csrf_token %} input type="search" placeholder="搜索" required
button type="submit"搜索/button/form
特别注意在 form 标签下有一个 {% csrf_token %},这是 django 用来防御跨站请求伪造(CSRF)攻击的机制。如果不知道什么是 CSRF 的话也没有关系,只要记住在使用 django 时,前端的表单代码里一定要加上 {% csrf_token %}。
用户输入了搜索关键词并点击了搜索按钮后,数据就被发送给了 django 后台服务器。表单的 action 属性的值为 /search/,表明用户提交的结果将被发送给 /search/ 这个 URL。我们为这个 URL 绑定一个 django 视图函数,在这个视图函数里完成前面第 2 步提到的过程。假设我们把视图函数的代码写在 blog/views.py 里:
blog/views.pydef search(request):
q = request.GET.get('q')
error_msg = ''
if not q:
error_msg = '请输入关键词'
return render(request, 'blog/errors.html', {'error_msg': error_msg})
post_list = Post.objects.filter(title__icontains=q)
return render(request, 'blog/results.html', {'error_msg': error_msg,
'post_list': post_list})
首先我们使用 request.GET.get('q') 获取到用户提交的搜索关键词。用户通过表单提交的数据 django 为我们保存在 request.GET 里,这是一个类似于 Python 字典的对象,所以我们使用 get 方法从字典里取出键 q 对应的值,即用户的搜索关键词。这里字典的键之所以叫 q 是因为我们的表单中搜索框 input 的 name 属性的值是 q,如果修改了 name 属性的值,那么这个键的名称也要相应修改。
接下来我们做了一个小小的校验,如果用户没有输入搜索关键词而提交了表单,我们就无需执行查询,而是渲染一个错误页面提示用户请输入关键词。
如果用户输入了搜索关键词,我们就通过 filter 方法从数据库里过滤出符合条件的所有文章。这里的过滤条件是 title__icontains=q,即 title 中包含(contains)关键字 q,前缀 i 表示不区分大小写。这里 icontains 是查询表达式(Field lookups),其用法是在模型需要筛选的属性后面跟上两个下划线。django 内置了很多查询表达式,建议过一遍 django 官方留个印象,了解每个表达式的作用,以后碰到相关的需求就可以快速定位到文档查询其用途:Field lookups
接下来就是渲染搜索结果页面,显示符合搜索条件的文章列表,下面是一个模板的简单示例:
results.html
{% if error_msg %} p{{ error_msg }}/p{% endif %}
{% for post in post_list %} div
在这里显示文章的相应信息 /div{% empty %} div class="no-post"
没有搜索到符合条件的文章 /div{% endfor %}
有了视图函数后记得把视图函数映射到相应了 URL,前面我们表单数据提交的 URL 为 /search/,因此将视图函数 search 绑定到该 URL 上。
blog/urls.pyurlpatterns = [
# 其他 url 配置
url(r'^search/$', views.search, name='search'),]
大功告成!
django2.0,实现搜索数据库数据并显示在网页的功能
我没环境,不方便帮你写代码,但可以告诉你思路:
你想用ajax方式查数据,第一步,你已经获取到了输入表单的的值,这很好。
第二步,你需要添加一个查询接口路由,和view,用来返回查询到后数据。
第三步,让前端js代码,用ajax的方式,请求你添加的查询路由地址,带上参数。
第四步,在路由对应的view代码中,获取通过url请求传过来的参数。
第五步,在view代码中,对参数进行检查,通过后,调用数据查询方法,获取结果集。
第六步,在view代码中,将结果集转为json(一般是json),返回。
第七步,ajax在收到返回结果后,将数据显示在网页中。
第八步,调整数据显示的样式,使之美观一点。
如有不明可以追问,或私信留言。
django问题:搜索功能,contains的用法
搜索还是用lucene吧。研究一下,很快就可以上手。实在不成你用whoosh,可以实现多个字段,复杂逻辑的搜索。
contains我没有用过,不过既然它支持一个字段的索引,按道理就可以支持多个字段。 原理上,它应该是自己对MYSQL的某个字段做了一个分词与索引。
另外有些数据库本身也支持一些简单的搜索,只是数据量大会效率低。
django如何实现搜索功能并分页每页最多5条数据
列表分页不要想复杂了,本质上来说,分为两部分,界面操作和数据库查询。
数据库查询,仅仅在查询的时候,加入分片,从第几个到第几个就行了
界面操作做好链接就行,这样比你去用django自带的分页方便多了,还更符合你自己的实际需求
Django2+xadmin 设置 relfield_style='fk-ajax' 搜索框不起作用的解决方法
当有外键指向他,会以ajax方式加载
数据量过大时很有用
我的环境是python3.6+Django2.0.7+xadmin
除了过滤器中加入的字段有效果,在表单录入界面并没有什么用
这个问题的原因是Django2中ForeignKey和Django1不一样造成的
修改 xadmin/views/edit.py
改为
修改 xadmin/plugins/relfield.py
改为
如何在django中实现文本输入框+下拉选择框的叠加形式
首先,在django 视图函数中,传递 obj_list = [1, 2, 3] 类似这样的一个列表。def show_data(request): obj_list = [1, 2, 3] pass return render_to_response('index.html', {'obj_list': obj_list}) 然后在 index.html 模板文件中
结语:以上就是首席CTO笔记为大家介绍的关于django怎么写搜索框的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。