2009-04-11 5 views
27

Chcę przekazać tablicę do szablonu, a następnie użyć go za pomocą JavaScript.Jak przekazać tablicę w Django do szablonu i użyć jej z JavaScriptem

W moim views.py mam:

arry1 = ['Str',500,20] 
return render_to_response('test.html', {'array1': arry1}) 

I w moim szablonu:

var array1 = {{ array1 }}; 

ale kiedy odwiedzam stronę wyprowadza:

var array1 = ['Str',500,20]; 

Co czy muszę się przebierać?

+0

Proszę, bądź bardziej konkretny. Jak to "oczywiście" złamie twój kod? JavaScript jest dla mnie ważny. –

+0

Kiedy po raz pierwszy opublikowałem pytanie stackoverflow przeformatowane & # 3 9; bez spacji do ". Myślę, że musi to być "praca zgodnie z przeznaczeniem w JavaScript (lub przynajmniej zakładam, że działa w ten sposób, ale jakoś tam pojawia się (ponownie bez spacji) – Christian

Odpowiedz

60

Spróbuj użyć {{ array1|safe }} i sprawdź, czy to ma znaczenie. Nie testowałem tego, więc mam nadzieję, że nie dostanę za dużo obniżki, jeśli to będzie nieprawidłowe ...

+0

To działa.Dziękuję człowiek. – Jijoy

+0

szczególnie pomocne dla mnie (i innych?) przejście z App Engine Django ver 0.96 do ver 1.2: w wersji 1.2 MUSISZ użyć bezpiecznego filtra, podczas gdy 0.96 był używany tylko do pracy ... – DanDan

+0

Co się stanie, jeśli jeden z elementów w 'tablica1' jest obiektem datetime. JavaScript nie rozpoznaje datetime. Na przykład jeśli 'tablica1 = ['str', 500, 20, datetime.datetime (2017, 8, 23, 0, 0)]' –

16

Jak wspomniano, możesz użyć | bezpiecznego filtru, więc Django nie dezynfekuje tablicy i pozostawia ją jako jest.

Inną opcją, i chyba lepiej jeden na dłuższą metę jest użycie modułu simplejson (nie jest to wliczone w Django) do formatowania listy Pythona do obiektu JSON, w którym można pluć powrotem do JavaScript. Możesz przechodzić przez obiekt JSON, tak jak każdą inną tablicę.

z django.utils import simplejson

liście = [1,2,3 'String1']

json_list = simplejson.dumps (lista)

render_to_response (template_name { 'json_list': json_list})

A w waszym Javascript, po prostu {{json_list}}

+0

json_list staje się [1, 2, 3, "String1"] (Dodałem spacje po &, q, u, o, t, aby zapobiec stackoverflow z reformowania wyjścia) To również nie działa. – Christian

+2

Być może najlepszym sposobem jest użycie simplejson.dumps, a następnie | bezpieczny filtr? – Christian

+0

Masz rację, nadal będziesz musiał użyć | safe w tym przypadku. Zwykle, gdy robię JSON z Django, pobieram go za pomocą metody AJAX (jak np. $ .getJSON z jQuery), więc nigdy nie mam do czynienia z używaniem | safe. – Bartek

6

W Django:

from django.utils import simplejson 
json_list = simplejson.dumps(YOUR_LIST) 

i przekazać "json_list" W KONTEKŚCIE

w JS:

var YOUR_JS_LIST = {{YOUR_LIST|safe}}; 
+0

Proszę użyć formatowania. – partlov

+0

Wygląda na to, że 'simplejson' nie jest już dostępny poza Django 1.5. Zamiast tego użyj json Pythona ('import json') – Anupam

0

To może być wykonane przez django rdzeniowych serializers. Wszystko, co musisz zrobić, to serializować dane w jsonie i przekazać je do szablonu.

data = serializers.serialize("json", <list>) 
return render(request, 'view.html', {'data':data}) 

W swoim szablonie zapisz tę listę w zmiennej javascript.

var list = {{data|safe}} 
Powiązane problemy