使用Bottle框架,从Python传递列表到JS的最佳方法是什么?

4

我正在使用Bottle作为Web服务器,并需要将Python列表传递给JavaScript。

当我仅使用{{myList}}时,Bottle会对列表中的字符串转义单引号并显示为'。这种情况下JS将不能正确处理。

我找到了一个解决方案,但我认为它不是最佳选择。

var tempList = '{{eval(myList)}}'.replace(/'/g, "'");
var myNewList = eval(tempList);

我在想,有没有更好的方法来解决这个问题?
更新:我把我发现的解决方案移动到了“答案”部分。

1
如果您的问题已经解决,请接受帮助最多的答案,或者编写您自己的答案,您也可以接受它。请勿在问题更新中发布您自己的答案。 - Helgi
此外,在Python 3中,json就是simplejson模块,该模块已经在一段时间前集成到Python标准库中。 - Martijn Pieters
3个回答

5

我开始使用json (在Python3中使用json_dumps,simplejson无法安装),但bottle仍然会转义单引号。我在Bottle手册中发现,你可以使用感叹号来跳过转义并更改了我的代码:

var myNewList = {{!myList}};

刚刚发现 json_dumps 的实际写法是这样的,因为它被 Bottle 引入时就是这样的。只不过在 Python 3 中,它仍然是 json.dumps。 - Noemi

2

请使用json模块代替;因为它输出的是有效的JavaScript表达式。

JSON(JavaScript对象表示)是JavaScript语法的子集(ECMA-262第3版)[...]

快速示例:

>>> import json
>>> json.dumps([1, 2, 'foo', 'bar'])
'[1, 2, "foo", "bar"]'

直接将其放入您的模板中。我经常使用它来在生成的网页中插入有效的JavaScript数据结构。


JSON不是一个有效的JavaScript数据结构。您应该解析JSON字符串以创建JavaScript中的列表:var yourList = JSON.parse({{yourJSONString}}); - iurisilvio
1
@iurisilvio:给我一个 JSON 字符串的例子,它不是有效的 JavaScript。我不认为U+2028 或 U+2029 字符足够了,因为 Python 的json模块使用\u符号转义它们。 - Martijn Pieters

0

我对Bottle不熟悉,但在使用Django时我遇到了同样的问题。我的解决方案是将Python列表转储为JSON格式。Javascript很喜欢JSON。

myList = [1, 2, 3, 'string', "&apm", '"']

然后将simplejson.dumps(myList)返回到您的网页中。 在js中:

var myList = <dumped-literal-JSON-string>

注意:不要用引号括住dumpped JSON值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接