Я использую Django для создания веб-приложения для проекта, и у меня возникают проблемы с возвратом массива из представления Django в шаблон.
Массив будет использоваться JavaScript (JQuery) script для рисования на изображении, показанном на странице. Следовательно, этот массив будет иметь, среди прочего, координаты для рисования полей.
Это код в представлении Django, используемый для получения требуемых данных и сериализации его как JSON:
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 работает так, как ожидалось. Однако оставить эту строку при разрыве script.
Я хочу, чтобы иметь возможность перебирать все объекты в модели Django и получать значения полей в JavaScript.
Я не уверен, что я здесь делаю неправильно, мог ли кто-нибудь указать правильный способ сделать это?