Как лучше всего передать список из python в js с помощью бутылки?

Я использую Bottle в качестве веб-сервера, и мне нужно передать список python в javascript.

Когда я делаю просто {{myList}}, Bottle экранирует одинарные кавычки для строк в списке и показывает их как ' JS, в свою очередь, не очень доволен тем, что он получает.

Мне удалось найти решение, но я не думаю, что оно оптимальное.

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

Интересно, есть ли лучший способ сделать это?

обновление: я переместил найденное решение в раздел "Ответы".


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 не устанавливается), но бутылка по-прежнему избегала одинарных кавычек. Я нашел в руководстве Bottle, что вы можете пропустить экранирование с помощью восклицательного знака, и изменил свой код:

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) — это подмножество синтаксиса JavaScript (3-е издание ECMA-262) […]

Быстрый пример:

>>> 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. достаточно, поскольку модуль json python избегает тех, кто использует нотацию \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

person Vijay Chowdhary    schedule 04.10.2013