Djangoを使用してプロジェクト用のWebベースのアプリを作成していますが、Djangoビューからテンプレートに配列を返す際に問題が発生しています。
この配列は、ページに表示されている画像にボックスを描画するためのJavaScript(JQuery)スクリプトによって使用されます。したがって、この配列には、特に、描画されるボックスの座標が含まれます。
これは、必要なデータを取得してJSONとしてシリアル化するために使用されるDjangoビューのコードです。
def annotate(request, ...):
...
oldAnnotations = lastFrame.videoannotation_set.filter(ParentVideoLabel=label)
tags = serializers.serialize("json", oldAnnotations)
...
return render_to_response('vannotate.html', {'tags': tags, ...})
デバッグの方法として{{ tags }}
、テンプレートのHTML部分で使用すると、これが出力として提供されます(長い行で申し訳ありません)。
[{"pk": 491, "model": "va.videoannotation", "fields": {"ParentVideoFile": 4, "ParentVideoFrame": 201, "ParentVideoLabel": 4, "top": 220, "height": 30, "width": 30, "ParentVideoSequence": 16, "left": 242}}, {"pk": 492, "model": "va.videoannotation", "fields": {"ParentVideoFile": 4, "ParentVideoFrame": 201, "ParentVideoLabel": 4, "top": 218, "height": 30, "width": 30, "ParentVideoSequence": 16, "left": 307}}]
これは、JSON配列の正しい形式だと思います。
tags
テンプレートの後半で、次のように、テンプレートのJavaScript部分で変数を実際に使用しようとします。
{% if tags %}
var tagbs = {{ tags|safe }};
var tgs = JSON.parse(tagbs);
alert("done");
{% endif %}
行を削除するとvar tgs = JSON.parse(tagbs);
、アラートボックスが正常にポップアップし、残りのJavaScriptは期待どおりに機能します。ただし、この行をそのままにしておくと、スクリプトが壊れます。
Djangoモデルのすべてのオブジェクトを反復処理して、JavaScriptのフィールドの値を取得できるようにしたいと思います。
ここで何が間違っているのかわかりませんが、誰かがこれを行う正しい方法を指摘できますか?