2011-07-07 106 views
5

我使用FlaskJinja2作为模板语言。Jinja2:如何创建多维javascript数组?

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

示例(Python /瓶):

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

回答

7

您可以使用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 }}); 

警告:我有点不确定逃逸位(|电子过滤器)。您可能需要检查<,>,&字符是否使用unicode转义序列而不是xml实体正确转义。

+0

谢谢jd(和Björn!),它优雅地解决了我的问题! – herira

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) 

瓶可能有JSON序列化数据的等效方式。这个可以也可以使用jinja2中的循环结构来完成,但比使用json慢很多倍。