Jinja2: Как создать многомерный массив JavaScript? - PullRequest
5 голосов
/ 07 июля 2011

Я использую Flask с Jinja2 в качестве языка шаблонов.

Как преобразовать многомерную структуру Python в соответствующую структуру в javascript с использованием Jinja2?

Пример (Python / Flask):

pyStruct = [{key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},
            {key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},]

render_template('jinjatemplate.html', pyStruct=pyStruct)

Пример (Jinja2):

??

Я думаю, что я спрашиваю, можно ли это сделать только путем созданияконструкции извилистых циклов в Jinja2, или я где-то пропускаю ярлык?

Если ответ да, нужно использовать извилистые циклы в Jinja2, тогда, вероятно, намного проще просто создать код javascript непосредственно вPython и передайте это Jinja2 для включения.

Но это, похоже, несколько ослабляет цель использования языка шаблонов, такого как Jinja2 ...

Я пытался (Jinja2):

{{ pyStruct|safe }}

... и это на самом деле работает до тех пор, пока ничто не является юникодом и не выходит за пределы земли Асии (что обычно происходит в моем случае).

О, и если вы удивляетесь, почемупередать такую ​​структуру?Я обнаружил, что часто хочу передавать довольно сложные структуры в javascript для использования меню и другими сложными интерфейсами выбора.

Ответы [ 2 ]

7 голосов
/ 07 июля 2011

Вы можете использовать модуль json либо в качестве фильтра Jinja, либо непосредственно передавая результаты json.dumps() в ваш шаблон.

pyStruct = [{key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},
            {key1:value1, key2:value2, [{subkey1:subvalue1, subkey2:subvalue2,}]},]

render_template('jinjatemplate.html', json_struct=json.dumps(pyStruct))

В шаблоне:

var myStruct = ({{ json_struct|e }});

Внимание: я немного не уверен насчет бита (| e filter).Возможно, вы захотите убедиться, что символы <,>, & правильно экранированы с помощью escape-последовательностей Юникода, а не с помощью сущностей xml.

2 голосов
/ 07 июля 2011

Сериализуйте его, используя json:

from django.utils import simplejson

pyStruct = [{'key1':'value1',
             'key2':'value2',
             'key3':[{'subkey1':'subvalue1', 'subkey2':'subvalue2'}]},
            {'key1':'value1',
             'key2':'value2',
             'key3':[{'subkey1':'subvalue1', 'subkey2':'subvalue2'}]}]
print simplejson.dumps(pyStruct)

Вероятно, у Flask есть эквивалентный способ сериализации данных json.Это может также быть выполнено с использованием конструкций цикла в jinja2, но во много раз медленнее, чем при использовании json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...