Jinja2:如何创建多维javascript数组?
如何使用 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)
示例(Jinja2):
??
我想我要问的是,只能通过在 Jinja2 中创建复杂的循环结构来完成,还是我在某处缺少快捷方式?
如果答案是肯定的,必须在 Jinja2 中使用复杂的循环,那么直接在 python 中创建 javascript 代码并将其传递给 Jinja2 进行包含可能会容易得多。
但这似乎在某种程度上违背了使用像 Jinja2 这样的模板语言的目的...
我尝试过(Jinja2):
{{ pyStruct|safe }}
...只要没有任何内容是 unicode,并且不偏离 Ascii 范围,这实际上就可以工作(它是在我的情况下通常是这样)。
哦,如果您想知道为什么要通过这种结构?我发现我经常想将相当复杂的结构传递给 javascript,以供菜单和其他复杂的选择界面使用。
I am using Flask with Jinja2 as templating language.
How do you convert a multidimensional Python structure to a corresponding structure in javascript using Jinja2?
Example (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)
Example (Jinja2):
??
I guess what I'm asking is, can it only be done by creating convoluted loop constructs in Jinja2, or am I missing a shortcut somewhere?
If the answer is, yes, one has to use convoluted loops in Jinja2, then it's probably a lot easier to just create the javascript code directly in python and pass this to Jinja2 for inclusion.
But that seems to defeat the purpose of using a template language like Jinja2 somewhat...
I tried (Jinja2):
{{ pyStruct|safe }}
...and this actually works as long as nothing is unicode, and doesn't stray out of Ascii land (which it usually does in my case).
Oh, and if you wonder why pass this kind of structure? I find I often want to pass fairly complicated structures to javascript to be used by menus and other complicated selection interfaces.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用
json
模块作为 Jinja 过滤器,或者直接将json.dumps()
的结果传递到您的模板。在模板中:
警告:我对转义位(|e 过滤器)有点不确定。您可能需要检查 <、>、&字符使用 unicode 转义序列而不是 xml 实体进行正确转义。
You can use the
json
module, either as a Jinja filter ou directly passing the results ofjson.dumps()
to your template.In the template:
Warning: I'm a bit unsure about the escaping bit (|e filter). You might want to check that the <, >, & characters are properly escaped with unicode escape sequences rather than xml entities.
使用 json 序列化它:
Flask 可能有一种等效的 json 序列化数据的方法。这也可以使用 jinja2 中的循环结构来完成,但比使用 json 慢很多倍。
Serialize it using json:
Flask likely has an equivalent way to json serialize data. This can also be done using loop constructs in jinja2, but is many times slower than using json.