使用url作为源的jQueryUI自动完成(使用Django)

时间:2011-02-16 19:00:43

标签: django jquery-ui jquery-ui-autocomplete

我正在使用Django web-framework进行数据库,页面生成等。

jQueryUI / javascript方面的代码

我想使用jQueryUI's autocomplete widget,因为我的数据集将包含我想查询数据库的大约1,000个条目。在上面的链接上,它声称您只需提供一个返回JSON数据的URL:

  

可以自定义自动填充功能   通过各种数据源   指定源选项。一个数据   来源可以是:

* an Array with local data
* a String, specifying a URL
* a Callback

我从网站上获取了default example,该网站适用于我的系统。

但是,如果我更改以下内容:

    $( "#tags" ).autocomplete({
        source: availableTags,
    });

    $( "#tags" ).autocomplete({
        source: "/search/", // url that provides JSON data
    });

自动完成功能根本不起作用。


我尝试过让url实际上返回一个错误(看它是否使用它)并输入完整的网址http://localhost:8000/search/,但没有任何效果。


Django代码的一部分

在url.py中

...
    (r'^search/$', 'search'),
...

在views.py

from django.http import HttpRequest, HttpResponse
from django.utils import simplejson 
...
def search(request):
    HttpResponse(simplejson.dumps(["hello", "world"]))
    # Will implement proper suggestions when it works.



我的代码一定有问题,我非常感谢您提供的任何帮助:)


编辑解决方案:

感谢@Thierry意识到它之前没有return声明,已添加,所以我现在看起来像这样:

def search(request):
    output = ["hello", "world"]
    return HttpResponse(simplejson.dumps(output))

它确实有效!

(似乎总是浪费我大部分时间的小虫子,grrr)

2 个答案:

答案 0 :(得分:2)

我返回我的ajax响应,如下所示:

def search(request):
    output = ["hello", "world"]
    return HttpResponse(output, mimetype="application/javascript")

如果您访问网址http://localhost:8000/search/,则应该看到输出。看到输出后,自动完成功能就可以了。

答案 1 :(得分:1)

在以后的版本中,json序列化API有一些变化

  • 对于django 1.6使用

    import json
    from django.http import HttpResponse
    ....
    return HttpResponse(json.dumps(my_data_dictionary))
    
  • 对于django 1.7+,请执行here