Jinja2: Jak vytvořit multidimenzionální pole JavaScriptu?

hlasů
5

Já používám baňky s Jinja2 jako šablonovacího jazyka.

Jak se vám převést multidimenzionální Python strukturu odpovídající struktuře v JavaScriptu pomocí Jinja2?

Příklad (Python / baňka):

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

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

Příklad (Jinja2):

??

Myslím, že to, co se ptám je, může to být provedeno pouze tím, že vytvoří spletitý smyčkové konstrukce v Jinja2, nebo jsem chybí zástupce někde?

Pokud odpověď zní ano, je nutné použít spletitý smyček Jinja2, pak je to pravděpodobně mnohem jednodušší vytvořit javascript kód přímo v pythonu a předat toto Jinja2 pro zařazení.

Ale to vypadá, že v rozporu s účelem použití šablony jazyk jako Jinja2 poněkud ...

Snažil jsem se (Jinja2):

{{ pyStruct|safe }}

... a to vlastně funguje tak dlouho, dokud není nic unicode, a nebude bloudit mimo ASCII půdy (což je obvykle dělá v mém případě).

Jo, a pokud by vás zajímalo, proč se projít tento druh konstrukce? Zjistil jsem často chci projít poměrně komplikované struktury, JavaScriptu, které mají být používány nabídek a dalších složitých výběrových rozhraní.

Položena 07/07/2011 v 12:25
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Serializaci jej pomocí 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)

Baňka má pravděpodobně způsobem rovnocenným json serializaci dat. To může být také provedeno pomocí smyčky konstruktů v jinja2, ale je mnohem pomalejší než při použití JSON.

Odpovězeno 07/07/2011 v 13:27
zdroj uživatelem

hlasů
7

Můžete použít jsonmodul, a to buď jako Jinja filtr ou přímo předáním výsledků json.dumps()do šablony.

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))

V šabloně:

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

Varování: Jsem trochu nejistý o útěku bitů (| e filtru). Možná budete chtít zkontrolovat, zda <,> a znaky jsou řádně unikl s unicode escape sekvencí spíše než xml subjektů.

Odpovězeno 07/07/2011 v 13:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more