我正在使用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
时,这将被视为字符串答案 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;
}
};