Używam Django do tworzenia aplikacji internetowej dla projektu i mam problemy z zwracaniem tablicy z widoku Django do szablonu.Powracanie tablicy JSON z widoku Django do szablonu
Tablica będzie używana przez skrypt JavaScript (JQuery) do rysowania pól na obrazie widocznym na stronie. Dlatego ta tablica będzie zawierać, między innymi, współrzędne dla pól do narysowania.
Jest to kod w widoku Django używane, aby uzyskać wymagane dane i szeregować je jako JSON:
def annotate(request, ...):
...
oldAnnotations = lastFrame.videoannotation_set.filter(ParentVideoLabel=label)
tags = serializers.serialize("json", oldAnnotations)
...
return render_to_response('vannotate.html', {'tags': tags, ...})
Jako sposób debugowania, używając {{ tags }}
w części HTML szablonu daje to jako wyjście (przepraszam za długą linię):
[{"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}}]
który zakładam, jest poprawnym formatem dla tablicy JSON.
Później w szablonie, próbuję faktycznie użyć zmiennej tags
w części JavaScript szablonu, co następuje:
{% if tags %}
var tagbs = {{ tags|safe }};
var tgs = JSON.parse(tagbs);
alert("done");
{% endif %}
Jeśli usunąć linię var tgs = JSON.parse(tagbs);
, wtedy alert box wyskakuje porządku , a reszta kodu JavaScript działa zgodnie z oczekiwaniami. Pozostawienie tego wiersza powoduje jednak przerwanie skryptu.
Chcę móc wykonywać iteracje po wszystkich obiektach w modelu Django i uzyskiwać wartości pól w JavaScript.
Nie jestem pewien, co robię źle tutaj, czy ktoś może wskazać właściwą drogę, aby to zrobić?
Nie przesyłasz danych do JavaScript, po stronie serwera wstrzykujesz do skryptu, a zatem kod jest interpretowany jako JavaScript na kliencie. Jeśli spojrzysz na źródło, zobaczysz, że jest to normalna literatura. W tym kontekście nie jest to JSON, więc nie możesz go przetworzyć. –