0

Django/Python 配列で JavaScript オートコンプリート機能を使用しようとしましたが、正しく動作しません。これが私のテンプレートスクリプトです:

    <script>
       $(function() {
         var availableTags = "{{bandas.ba_nombre}}"
         $( "#tags" ).autocomplete({
           source: availableTags
       });
    });
    </script>

そして、HTML 入力ボックスがあります<input id="tags" />

Python 配列を JSON にダンプする別の方法をいくつかの Web サイトで読みましたが、次のエラーが表示されます。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>

別の方法はありますか?または、私は何を間違っていますか?

4

2 に答える 2

1

Django-autocomplete-light を使うと思います

最初に学ぶのは少し難しいですが、その後、オートコンプリート フィールドの生成に大いに役立ちます https://github.com/yourlabs/django-autocomplete-light/

于 2013-11-04T08:57:32.103 に答える
0

django と一緒に jQuery UI オートコンプリートを使用した経験があり、2 つの組み合わせに一般的な問題があることがわかりました。本質的に、これは、部分的に JSON である応答を送信できないためです。そのため、既に jQuery UI に適した形式で available_tags を返すか、タグを返すだけの別の関数を使用します。2 つのアプローチの例を示します。

  1. サーバー側でフォーマット済みのデータを送信します。これは一種の強引な方法であり、あまりお勧めできませんが、ニーズには十分に役立つ可能性があります。

    サーバ側:

    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...
           });
    
  2. 別の応答を使用して、動的にフェッチします。

    サーバ側:

    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... });
    

確かに、2 番目のオプションの方がより推奨されますが、最初のオプションを使用することもありました。それを変更して少し違った使い方をする必要があるかもしれません (特に Unicode などを使用している場合、repr は問題になる可能性があります)。

于 2013-11-04T10:12:20.577 に答える