Jinja2:如何创建多维JavaScript数组?
我想知道如何把一个多维的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中使用复杂的循环,那么直接在Python中生成JavaScript代码,然后把它传给Jinja2来包含,可能会简单很多。
不过这样似乎有点违背使用像Jinja2这样的模板语言的初衷……
我尝试过(Jinja2):
{{ pyStruct|safe }}
……只要没有使用unicode,并且不超出Ascii范围(在我的情况下通常会超出),这个方法实际上是有效的。
哦,如果你在想为什么要传这种结构?我发现我经常需要把比较复杂的结构传给JavaScript,以便在菜单和其他复杂的选择界面中使用。
2 个回答
2
用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更快。
6
你可以使用 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 过滤器)有点不太确定。你可能需要检查一下 <, >, & 这些字符是否用 Unicode 转义序列正确转义,而不是用 XML 实体。