【问题标题】:Jinja2: How to create multidimensional javascript array?Jinja2:如何创建多维 JavaScript 数组?
【发布时间】:2011-07-07 11:25:28
【问题描述】:

我使用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,以供菜单和其他复杂的选择界面使用。

【问题讨论】:

    标签: javascript python flask jinja2


    【解决方案1】:

    您可以使用json 模块,或者将json.dumps() 的结果直接传递给您的模板作为Jinja 过滤器。

    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 实体正确转义。

    【讨论】:

      【解决方案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 慢很多倍。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 2012-05-14
        • 2012-10-29
        • 1970-01-01
        • 2015-11-15
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多