使用jinja2将unicode字符串移交给javascript

时间:2013-11-19 13:50:58

标签: javascript python google-app-engine unicode jinja2

我正在使用GAE,在某个阶段我解码UTF8字符串,然后将其移交给带有Jinja2的HTML文件:

  for i in report:
        unique_channels.append(i[0][j].decode("utf8"))

    template_values = {
        "unique_channels" : unique_channels,
        "result" : result
    }

现在,当我使用Jinja2迭代这个unicode字符串列表时,一切都很好。但是当我将此列表传递给Javascript时,Javascript会引发意外的字符串错误。我假设原因是u'xxx'/ Unicode字符串。

var unique_channels = {{ unique_channels }};

for (var i = 1; i < 11; i++) {
   new_data.push({"Position" : i.toString()})
    for (var k = unique_channels.length - 1; k >= 0; k--) {
      new_data[i-1][unique_channels[k]] = 0;
    } 
};

我该如何避免这种情况?我应该以不同的方式将列表传递给javascript吗?有什么建议吗?

编辑:我使用unique_channels列表的第二部分:

{% for j in unique_channels %}
<br><input type="checkbox" class="checkbox" name="{{ j }}" value="{{ j }}" onclick="updateData();" checked> {{ j }}
{% endfor %}

当我使用json.dumps

时,这将被视为字符串

1 个答案:

答案 0 :(得分:2)

在传递给模板之前使用json.dumps序列化数据:

  for i in report:
        unique_channels.append(i[0][j].decode("utf8"))

    template_values = {
        "unique_channels" : json.dumps(unique_channels),
        "result" : result
    }

在模板中使用safe过滤器以防止转义:

var unique_channels = {{ unique_channels|safe }};

for (var i = 1; i < 11; i++) {
   new_data.push({"Position" : i.toString()})
    for (var k = unique_channels.length - 1; k >= 0; k--) {
      new_data[i-1][unique_channels[k]] = 0;
    } 
};