首页>>后端>>Python->django怎么写搜索框(2023年最新整理)

django怎么写搜索框(2023年最新整理)

时间:2023-12-25 本站 点击:0

导读:很多朋友问到关于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怎么写搜索框的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/59892.html