Jinja2:如何创建多维javascript数组?

her*_*ira 5 javascript python jinja2 flask

我使用FlaskJinja2作为模板语言.

如何使用Jinja2将多维Python结构转换为javascript中的相应结构?

示例(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)
Run Code Online (Sandbox Code Playgroud)

示例(Jinja2):

??
Run Code Online (Sandbox Code Playgroud)

我想我要问的是,它只能通过在Jinja2中创建复杂的循环结构来完成,还是我在某个地方错过了一个快捷方式?

如果答案是,是的,必须在Jinja2中使用复杂的循环,那么直接在python中创建javascript代码并将其传递给Jinja2以包含它可能要容易得多.

但这似乎打败了使用像Jinja2这样的模板语言的目的......

我试过(Jinja2):

{{ pyStruct|safe }}
Run Code Online (Sandbox Code Playgroud)

...这实际上只要没有unicode就可以工作,并且不会偏离Ascii的土地(在我的情况下通常会这样做).

哦,如果你想知道为什么要通过这种结构?我发现我经常想将相当复杂的结构传递给javascript以供菜单和其他复杂的选择界面使用.

jd.*_*jd. 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))
Run Code Online (Sandbox Code Playgroud)

在模板中:

var myStruct = ({{ json_struct|e }});
Run Code Online (Sandbox Code Playgroud)

警告:我对转义位(| e过滤器)有点不确定.您可能希望检查<,>,&字符是否使用unicode转义序列而不是xml实体正确转义.