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

发布于 2024-11-19 01:12:05 字数 935 浏览 3 评论 0原文

我正在使用 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)

示例(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海拔太高太耀眼 2024-11-26 01:12:05

您可以使用 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 实体进行正确转义。

You can use the json module, either as a Jinja filter ou directly passing the results of json.dumps() to your template.

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

In the template:

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

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.

那伤。 2024-11-26 01:12:05

使用 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 慢很多倍。

Serialize it using 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 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文