当前位置: 首页 > 网络应用技术

如何为Django编写搜索框(2023年的最新饰面)

时间:2023-03-07 20:49:34 网络应用技术

  简介:许多朋友询问了Django是如何写有关搜索框的。本文的首席执行官注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!

  让我们的Django博客应用程序具有以下文章模型:

  Blog/models.pyclass帖子(Models.Model):

  # 标题

  title = models.charfield(max_length = 70)

  #正正

  body = model.textfield()

  #其他属性

  def __str __(self):

  返回self.title

  首先,请参见步骤1,用户在搜索框中输入搜索关键字,因此我们需要为博客上的用户提供搜索表格。HTML表单代码可能是这样的:

  形式方法=“ get” action =“/search/”

  {%csrf_token%}输入类型=“搜索”占位符=“搜索”需要

  按钮类型=“提交”搜索/按钮/表单

  特别是,在表单标签下有一个{%csrf_token%}。这是Django捍卫Cross -Site请求伪造(CSRF)攻击的一种机制。如果您不知道CSRF是什么,这没关系。请记住,使用Django时,您必须将{%csrf_token%}添加到前端表单代码。

  用户输入搜索关键字并单击搜索按钮后,将数据发送到Django背景服务器。表单的操作属性的值为 /搜索 /,表明用户提交的结果将发送到/search /this URL.我们绑定此URL的DJANGO视图函数,并在此视图函数中完成上一步2中提到的过程。支持我们在blog /views.py中编写视图函数的代码:

  blog/views.pydef搜索(请求):

  q = request.get.get('q')

  error_msg =''

  如果不是Q:

  error_msg ='请输入关键字'

  返回渲染(请求,'blog/errors.html',{'error_msg':error_msg})

  post_list = post.objects.filter(title__icontains = q)

  返回渲染(请求,'blog/results.html',{'error_msg':error_msg,

  'post_list':post_list})

  首先,我们使用request.get.get('q')获取用户提交的搜索关键字。用户通过表格Django提交的django存储在request.get中。这是一个类似于Python字典的对象,因此我们使用GET方法从字典中删除键Q的值,即用户的搜索关键字。此处的字典键称为,因为该字典的键是因为我们表格中输入框的名称属性为Q。如果修改了名称属性的值,则必须对此键的名称进行相应修改。

  接下来,我们进行了少量验证。如果用户在不输入搜索关键字的情况下提交表单,则我们不需要执行查询,而是渲染错误的页面来指示用户应输入关键字。

  如果用户输入搜索关键字,我们将通过过滤器方法从数据库中滤除所有合格的文章。此处的过滤条件是title__icontains = q,即关键字q包含(包含)关键字q,而前缀i表示,它没有区分情况。iContains是一个字段查找,用于与需要筛选的模型背后的两个下属线保持一致。Django有很多查询表达式。建议留下官方印象,以了解每个表达的角色。将来,您可以快速定位文档以查询文档的目的:现场查找

  下一步是渲染搜索结果页面,显示符合搜索条件的文章列表。以下是模板的简单示例:

  results.html

  {%如果error_msg%} p {{error_msg}/p {%endif%}

  {post_list%} div中的帖子

  在此处显示文章的相应信息 /div {%空%} div class =“ no-pos”

  没有合格的文章 /div {%endfor%}

  视图函数后,请记住将视图函数映射到相应的URL。通过我们的表单数据提交的URL为 /搜索 /,因此视图功能搜索被键入URL。

  blog/urls.pyurlpatterns = [

  #其他URL配置

  url(r'^search/$',views.search,name ='search'),]],]]

  更大的功绩!

  我没有环境,不方便地帮助您编写代码,但是您可以告诉您:

  您想用Ajax检查数据。在第一步中,您获得了输入形式的值,这非常好。

  在第二步中,您需要添加查询接口路由,并查看以返回查询数据。

  第三步,让前端JS代码使用AJAX要求您添加查询路由地址以带来参数。

  第四步是获得通过相应视图代码中的URL请求传递的参数。

  第五步是检查视图代码中的参数。通过后,调用数据查询方法以获取结果集。

  步骤6,在视图代码中,将结果设置转换为JSON(通常是JSON)并返回。

  在第七步中,收到返回结果后,Ajax在网页中显示了数据。

  步骤8,调整数据显示的样式以使其变得美丽。

  如果您未知,则可以询问或留言。

  搜索或使用Lucene。研究,您可以尽快开始。不可能使用WHOOSH来实现多个字段和复杂的逻辑搜索。

  包含我没有使用过它,但是现在它支持字段索引,它可以支持多个字段。原则上,它应该是MySQL字段上的单词和索引。

  此外,某些数据库本身还支持一些简单的搜索,但是数据量会议效率低下。

  标准列表不应复杂。从本质上讲,它分为两部分:接口操作和数据库查询。

  数据库查询,只需在查询中查询时添加切片

  接口操作做得很好。

  当他有外部钥匙时,它将以Ajax模式加载

  当数据量太大时很有用

  我的环境是python3.6+django2.0.7+xadmin

  除了过滤器中添加的字段外,它在表单中的输入接口中有效。

  此问题的原因是django2中的外国keyke和django1不同

  修改xadmin/views/edit.py

  改成

  修改xadmin/插件/relfield.py

  改成

  首先,在django视图函数中,通过obj_list = [1,2,3]像这样的列表。obj_list':obj_list})))

  结论:以上是Django如何为首席执行官指出的搜索框的所有内容。我希望这对每个人都会有所帮助。如果您想了解有关此信息的更多信息,请记住收集并关注此网站。