我一直在尝试使用带有Django / Python数组的javascript自动完成功能,但我从来没有让它正常工作。这是我的模板脚本:
<script>
$(function() {
var availableTags = "{{bandas.ba_nombre}}"
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
然后我有我的HTML输入框<input id="tags" />
。
我在一些网站上看到另一种方法是将Python数组转储到JSON中,我收到以下错误:Invalid filter: 'jsonify'
这是我用于JSON实现的Python代码:
register = Library()
def jsonify(object):
if isinstance(object, QuerySet):
return mark_safe(serialize('json', object))
return mark_safe(simplejson.dumps(object))
register.filter('jsonify', jsonify)
jsonify.is_safe = True
我的剧本:
<script>
$(function() {
var availableTags = jQuery.parseJSON('{{bandas.ba_nombre|jsonify }}');
alert(availableTags.length);
$( "#tags" ).autocomplete({
source: availableTags
});
});
</script>
还有其他方法吗?或者我做错了什么?
答案 0 :(得分:1)
我会说使用Django-autocomplete-light
一开始学习起来有点棘手,但之后有助于生成自动完成字段 https://github.com/yourlabs/django-autocomplete-light/
答案 1 :(得分:0)
我有一些使用jji UI自动完成和django的经验,并且发现两个组合存在一般问题。本质上,这是因为您无法发送部分为JSON的响应,因此您要么以正确的格式为jQuery UI返回available_tags,要么使用另一个只返回标记的函数。举两个方法的例子。
发送已在服务器端格式化的数据。这是一种蛮力的方式,不是很推荐,但可能足以满足您的需求:
服务器端:
available_tags = ['example', 1, 2, 'test']
return render_to_response('mytemplate.html', {'available_tags': repr(available_tags) })
客户端:
$( "#tags" ).autocomplete({
source: {{ availableTags }} //notice I didn't put '' around it...
});
使用其他响应并动态获取:
服务器端:
def main(request):
...
return render_to_response('mytemplate.html')
def get_tags(request):
data = {'example': 1, 'code': 2}
return HttpResponse(json.dumps(data), content_type="application/json")
客户端:
var available_tags = $.get('get_tags/', function(data) { ...parse the json and whatnot... });
当然,更推荐第二种选择,但有时我也使用第一种选择。您可能需要更改它并使用它有点不同(repr可能有问题,特别是如果使用unicode等)但它是一个试错的东西,你明白了。