Какъв би бил най-добрият начин за предаване на списък от python към js с помощта на бутилка?

Използвам Bottle като уеб сървър и трябва да предам списък на python на javascript.

Когато правя само {{myList}}, Bottle избягва единичните кавички за низове в списъка и ги показва като ' JS на свой ред не е много доволен от това, което получава.

Успях да намеря решение, но не мисля, че е оптимално.

var tempList = '{{eval(myList)}}'.replace(/'/g, "'");
var myNewList = eval(tempList);

Чудя се има ли по-добър начин да направите това?

upd: Преместих решението, което намерих, в секцията „Отговори“.


person Noemi    schedule 11.07.2012    source източник
comment
Ако въпросът ви е разрешен, моля, приемете отговора, който ви е помогнал най-много, или напишете свой собствен отговор, който също ще можете да приемете. Моля, въздържайте се от публикуване на собствен отговор в актуализация на въпроса.   -  person Helgi    schedule 12.07.2012
comment
Освен това json в python 3 е модулът simplejson, който беше интегриран в стандартната библиотека на python преди известно време.   -  person Martijn Pieters    schedule 12.07.2012


Отговори (4)


Започнах да използвам json (json_dumps в Python3, simplejson няма да се инсталира), но бутилката все още избягваше единични кавички. Открих в ръководството за бутилка, че можете да пропуснете екранирането с помощта на удивителния знак и промених кода си:

var myNewList = {{!myList}};
person Noemi    schedule 12.07.2012
comment
Току-що разбрах, че json_dumps всъщност изглежда по този начин, защото е импортиран в Bottle по този начин. Просто в Python 3 все още ще бъде json.dumps - person Noemi; 18.07.2012

Вместо това използвайте json модул; в крайна сметка извежда валидни JavaScript изрази.

JSON (JavaScript Object Notation) е подмножество от синтаксиса на JavaScript (ECMA-262 3-то издание) […]

Бърз пример:

>>> import json
>>> json.dumps([1, 2, 'foo', 'bar'])
'[1, 2, "foo", "bar"]'

Поставете това направо във вашия шаблон. Използвам това през цялото време, за да поставя валидни структури от данни на JavaScript в моите генерирани уеб страници през цялото време.

person Martijn Pieters    schedule 11.07.2012
comment
JSON не е валидна структура от данни на JavaScript. Трябва да анализирате JSON низ, за ​​да създадете списъка в JavaScript: var yourList = JSON.parse({{yourJSONString}}); - person iurisilvio; 12.07.2012
comment
@iurisilvio: дайте ми пример за JSON низ, който не е валиден JavaScript. Не отчитам знаците U+2028 или U+2029 като достатъчно, тъй като модулът python json избягва тези, използващи нотацията \u. - person Martijn Pieters; 12.07.2012

Не съм запознат с Bottle, но имам същия проблем, когато използвам Django. Моето решение е изхвърляне на списъка на Python във формат JSON. Javascript е доволен от JSON.

myList = [1, 2, 3, 'string', "&apm;", '"']

След това върнете simplejson.dumps(myList) на вашите уеб страници. В js:

var myList = <dumped-literal-JSON-string>

ЗАБЕЛЕЖКА: НЕ ограждайте изхвърлената JSON стойност с кавички.

person xiaowl    schedule 11.07.2012

В случай на използване на django

var myNewList = {{myList|safe}};

Django doc

person Vijay Chowdhary    schedule 04.10.2013