当前位置:首页 » 网页前端 » 前端如何实现站点搜索组件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端如何实现站点搜索组件

发布时间: 2022-05-07 07:27:53

① 求助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'),]

大功告成!

② web前端怎么设计有利于搜索引擎

搜索功能指的是搜索算法的实现吗?

如果是搜索算法,涉及到基本的顺序搜索,二分法等。

如果不是指算法,而是网页的搜索框:

  • html:一个textbox,一个button,

  • 在button onclick事件中,执行js搜索算法

③ javascript搜索功能是怎么实现的要跟后台交互吧是不是和过滤功能差不多原理

搜索功能有多种实现方式 ,前后端都可以实现
第一种:
页面内搜索(类似CTRL+F),这个可以纯前端完成,直接用js匹配搜索结果,进行隐藏显示或改变颜色等
第二种:
纯后端方案,将搜索的字符串拼接到一个新的url参数后,然后跳转到生成的url上,直接显示新页面搜索结果,如最早的搜索就是一个跳转 ,目前已经不使用这种方式
第三种:
Ajax搜索,需要前后端配合,将关键字发送一个请求到后端,后端需要将结果的数据传给前端,前端根据返回的数据,重新对页面部分进行渲染
CTRL+F不支持正则,这个是浏览器自带的功能,由于正则对于普通用户来说,是很专业的,浏览器一般不会去支持很少有人会用的功能,当然是否支持取决于浏览器厂商的想法

④ web前端结构怎么设计有利于搜索引擎

1,扁平化结构
2,面包屑导航
3,最新最热板块
4,页面静态化

⑤ 在不适用搜索引擎的情况下如何实现前端的搜索功能

通过页面开发与数据库查找即可实现前端的搜索功能。

⑥ web前端组件怎么实现

模块化更一种开发规范,比如cmd amd 是为了更好的解藕,比如一个网站,按照不同的模块来开发,比如你有个评论区,a 项目有,b 项目有,如果仅是单纯的模块开发,这个js 文件你就可以单独来回引用,
更比如 ,一个页面 分好多个功能, 这时候你要是都写在一个js 中 会越来越大,
而你把他分成不同的模块,
比如评论是一块
分页又是一块,
已经上线,或你不做了,后期别人拉手,或你接手别人的项目, 这时候来个需求让你把分页去掉,或修改 你可以清楚的找到对应模块文件 进行修改 或去掉
模块是自定义的,

组件,更想当于一个通用的东西,有的分功能组件,有的分业务组件
大图切换,这种就是单纯的一个效果展示,只要调用就ok
一个分页,也是只单纯的调用,
组件更是一个多处都可以使用 ,不需要再单独开发的

⑦ 前端怎么进行组件化的开发,以及如何解决组件之间依赖

可以用webpack,目前最火的前端构建工具。只要加载loader,你想引用什么模块就引用什么模块。现在用的就是webpack+react,组件化太方便了。更多问题可以去php中文网问答社区提问

⑧ 用python实现网页搜索功能

不知道你知道不知道AJAX,如果知道这个就容易弄了,用jq来POST数据,然后前面只用一个静太页就可以,点搜索就用ajax把搜索请求发过去,点修改就发修改请求
如果在一个页面要实现也可以在下面加一个隐藏的input用来定义是哪个功能,然后后台再根据这个功能名去判断如何处理

⑨ 在dreamweaver里怎么实现网页的搜索功能

有三种常见的方式

1、自己设计表单、编程、与数据库链接检索。

2、在网络或谷歌注册申请站内搜索功能。获得代码,添加到自己的页面中。

3、使用第三方的工具软件,搭建检索功能

下面是制作’PHP搜索’功能
准备:
数据库(mysql):一个数据库(search),库里面一个表(title),表里面一个字段(name).
PHP页面:两个页面(index.php search.php)
制作工具:Dreamweaver

开始:
——————————————————

第一步.创建数据库.(目前大家应该都是用的phpmyadmin来操作数据库的吧?)
建立一个数据库.

第二步.建表
在刚建立的search数据库里插入一个名字为title的表.建表时让你选插入几个字段.写1就可以了.

第三步.建字段
插入的字段命名为name,长度值20就可以了.

—–数据库部分已经做完,接下来是网页部分—–

第四步.建立两个页面
建立两个文件:index.php和search.php可以使用记事本等文本工具直接建立.我使用的工具是Dreamweaver(方便嘛.呵呵).

第五步.index.php的页面制作.
这个页面是用来传递你搜索的关键字的.代码如下:
<form method=”post” action=”search.php” name=”search”>
<input name=”search” type=”text” value=”" size=”15″> <input type=”submit” value=”Search”>
</form>
这段代码是建立一个FORM表单.专门用来提交数据的.
第一行是FORM表单的开始.它的传递方式是post,传递到search.php这个页面.表单名为name.
第二行是文本域和提交按钮.文本域命名为search,按钮默认就可以了.
第三行是FORM表单的结束语句.

第五步.search.php的页面制作.
这个页面很关键.因为他是获取index页面传递过来的值,然后导出搜索的数据.
首先要绑定你建立的search数据库,我用的DW生成的.
上一个页面传送的文本域是search.所以,这里需要建立一个search变量.来接收你输入的关键词.用以下语句定义变量:
<?php
$searchs = $_POST['search'];
?>

然后建立一个记录集,选择高级.SQL语句中填写:
SELECT *

FROM title

WHERE name like ‘%$searchs%’

这句的意思是选择title表里面的所有字段(*),然后查询name中的$searchs变量。这个变量也就是你在index中输入的值啦。

然后在BODY里面绑定一个动态文本。选择NAME。

—–网页部分完成.真个搜索功能也就完成了—–

⑩ 怎么样实现前端实现动态添加input框 并做模糊搜索功能

1

<input type="text" autocomplete="on">

input 的autocomplete属性默认是on,但某些浏览器还是需要你手动写上默认值才有效,其含义代表是否让浏览器自动记录之前输入的值,off:则关闭记录。该功能十分垃圾,交互让人诟病不已,每次必须提交刷新后才能记住存入历史,不推荐,垃圾。
原生基础上增强交互
我并不是说去改变autocomplete="on"的原生功能,而是通过另一种方式实现我们想要的效果,首先我们要准备一个输入时候出现下面那个下拉框可选性,那么这个东西其实原生是有的,并不需要我们去自己写,如下:

1
2
3
4
5

<input type="text" class="form-control" id="phone_number" value="1876487748" placeholder="请输入手机号码/imei/accid" list="cars">
<datalist id="cars">
<option value="17314459887"></option>
<option value="1876487748"></option>
</datalist>

动态缓存
上面已经做好了模型,但并不能实现动态记忆,而是写死的两个,很显然,我们需要用到本地缓存,将我们每次提交查询的值push到当前datalist的数据中去

1
2
3
4
5
6
7
8
9
10
11

// 提交之前先判断需不需要存储,如果当前数据中已经存在的,那么不去重复添加
var dataInput = $('#phone_number').val();
var locData = JSON.parse(localStorage.getItem('dataList'));
if (!locData || !locData.includes(dataInput)) {
if (!locData) {
localStorage.setItem('dataList', JSON.stringify([dataInput]));
} else {
localStorage.setItem('dataList', JSON.stringify(locData.concat([dataInput])));
}
}
scope.addDataList();

1
2
3
4
5
6
7
8
9
10
11
12
13

// 通过jq将数据插入到datalist中
addDataList: function() {
var opt = '';
var locData = JSON.parse(localStorage.getItem('dataList'));
if (locData.length > 15) {
locData = locData.slice(locData.length - 15, locData.length);
}
console.log('locData', locData);
for (var i = 0, len = locData.length; i < len; i++) {
opt += '<option value="' + locData[i] + '">';
}
$('#cars').html(opt);
}