Django & JQuery 实现 Autocomplete
2014-09-03 13:47
92 查看
输入框自动完成(Autocomplete 或称 Suggest)是一般系统中常见的功能,但是通过Django来实现,于我来说(刚开始接触Python)还是第一次,经过近1天的时间,终于完成了所有的设计中的功能,记录下来,留给其他有需要的同学及自己备忘:
注:因为懒得调整CSS和截图了,所以找了张最终效果与本文基本接近的示意图,特此说明。
Python 2.7
Jquery 1.4
Jquery Autocomplete 插件
进阶:输入框下方的提示匹配列表内容可定制,如同时显示产品名称及产品编码,用户选取后结果也可定制,确定采用产品名称或编码均可
实现由3部分组合完成:
前台页面:search.html (提供搜索及结果返回界面,并加载Jquery框架)
数据库模型 :model.py
后台匹配:search.py (根据搜索要求实时提供数据)
然后在urls,py中配置好你的 /search/ 指向到 view.py 中的 tag_autocomplete即可
注:因为懒得调整CSS和截图了,所以找了张最终效果与本文基本接近的示意图,特此说明。
运行环境:
Django 1.25Python 2.7
Jquery 1.4
Jquery Autocomplete 插件
设计要求:
基本:提供一个输入框,用户在框中输入数据时系统根据数据库中内容自动提取与之匹配的数据,在输入框下方显示并由用户选取进阶:输入框下方的提示匹配列表内容可定制,如同时显示产品名称及产品编码,用户选取后结果也可定制,确定采用产品名称或编码均可
实现由3部分组合完成:
前台页面:search.html (提供搜索及结果返回界面,并加载Jquery框架)
数据库模型 :model.py
后台匹配:search.py (根据搜索要求实时提供数据)
search.html 代码
01 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > |
02 | <html><head><meta http-equiv= "Content-Type" content= "text/html; charset=UTF-8" > |
03 | <title>Django jQuery Autocomplete</title> |
04 | <script type= "text/javascript" src= "./Autocomplete/jquery.js" ></script> |
05 | <script type= "text/javascript" src= "./Autocomplete/jquery.autocomplete.js" ></script> |
06 | <link rel= "stylesheet" type= "text/css" href= "./Autocomplete/jquery.autocomplete.css" > |
07 |
08 | <script type= "text/javascript" > |
09 | $().ready( function () { |
10 |
11 | function findValueCallback(event, data, formatted){ |
12 | $( "<li>" ).html( !data ? "No match!" : "Selected: " + formatted).appendTo( "#result" ); |
13 | } |
14 |
15 | function formatItem(row) { |
16 | return row[0] + " <strong>产品编码:</strong>" + row[1] ; //此处可定制提示信息 |
17 | } |
18 | function formatResult(row) { |
19 | return row[0].replace(/(<.+?>)/gi, '' ); |
20 | } |
21 | $( "#suggest" ).autocomplete( '/search/' , { |
22 | width: 300, |
23 | multiple: false ,multipleSeparator: ' ' , //此处关闭了多选功能,mulitiple: true为打开 ,mulitipleSeparator为多选时分隔符,默认为',' |
24 | matchContains: true , |
25 | formatItem: formatItem, //格式化提示选项 |
26 | formatResult: formatResult //格式化结果输出 |
27 | }); |
28 | $( "#suggest" ).result( function (event, data, formatted){ |
29 | var hidden = $( this ).parent().next().find( ">:input" ); |
30 | hidden.val( (hidden.val()? hidden.val()+ ";" : hidden.val())+ data[1]); |
31 | }); |
32 | }); |
33 |
34 | </script> |
35 |
36 | </head> |
37 | <body> |
38 | <div id= "content" > |
39 | <form > |
40 | <p> |
41 | <label>please input:</label> |
42 | <textarea id= "suggest" class= "ac_input" ></textarea> |
43 | <input type= "button" value= "Get Value" > |
44 | </p> |
45 | <p> |
46 | <label>Hidden input</label> |
47 | <textarea></textarea> |
48 | </p> |
49 |
50 | <input type= "submit" value= "Submit" > |
51 | </form> |
52 |
53 | <h3>Result:</h3> <ol id= "result" ></ol> |
54 |
55 | </div> |
56 | </body> |
57 | </html> |
models.py
1 | class Products(models.Model): |
2 | name = models.CharField(max_length = 60 ) |
3 | code = models.CharField(max_length = 30 ) |
4 | def __unicode__( self ): |
5 | return self .name |
6 |
7 | def _get_full_name( self ): #注意此处,很重要,通过加入full_name这一属性,完成了与JS的数据对接 |
8 | return ( "%s|%s" ) % ( self .name, self .code) #与JS代码中的格式要求一致即可 |
9 | full_name = property (_get_full_name) |
view.py
显示源码打印?01 | # |
02 | from learn.school.models import Products |
03 | from django.http import HttpResponse |
04 | from django.db.models import Q |
05 |
06 | def tag_autocomplete(request): |
07 | if request.GET.has_key( 'q' ): |
08 | q_str = request.GET[ 'q' ] |
09 | if len (q_str)> 0 : #定义输入多少字符后开始查询 |
10 | tags = (Students.objects. filter (Q (name__icontains = request.GET[ 'q' ]) | Q (age__icontains = request.GET[ 'q' ])))[: 10 ] #导入高级查询模式Q 进行逻辑或查询,此处查询结果数最好与JS代码中的限制一致,避免多余开销 |
11 | return HttpResponse( '\n' .join(tag.full_name for tag in tags)) #使用了模型中自定义的属性 full_name |
12 | return HttpResponse() |
相关文章推荐
- Django & JQuery 实现 Autocomplete
- 在Django中试用jQuery的Autocomplete插件,实现自动提示功能
- 通过javascript直接实现jQuery的$(".class1")方法
- jQuery.Autocomplete实现自动完成功能(详解)
- jQuery.Autocomplete实现自动完成功能(详解)
- jQuery.Autocomplete实现自动完成功能(详解)
- jquery autocomplete实现solr查询字段自动填充并执行查询
- jquery,ajax 实现autocomplete,输入提示
- jquery autocomplete 自己实现div达到输入提示效果
- JavaScript判断远程图片是否存在,加载完成:onerror 属性- & jQuery实现(如果因为网络或图片的原因发生异常,则显示该图片)~
- jQuery.Autocomplete实现自动完成功能(详解)
- django 1.4 利用jquery实现ajax ‘get|post’异步请求
- jQuery.Autocomplete实现自动完成功能(详解)
- 利用JQuery实现固定表头,兼容IE7/8 & FF
- JavaScript判断远程图片是否存在,加载完成:onerror 属性- & jQuery实现(如果因为网络或图片的原因发生异常,则显示该图片)~
- javascript学习之简单实现jquery的$("div").text()。
- jQuery.Autocomplete实现自动完成功能(详解)
- jQuery autoComplete实现模糊查询
- jsp中使用Jquery autocomplete plugin 读取远程数据,实现信息智能提示
- jquery autocomplete 实现搜索提示功能,中文/拼音也没问题