4

我使用 Bottle 作为 Web 服务器,需要将 python 列表传递给 javascript。

当我只做 {{myList}} 时,Bottle 转义列表中字符串的单引号并将它们显示为' JS,反过来,它对它得到的结果并不满意。

我设法找到了解决方案,但我认为这不是最佳解决方案。

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

我想知道,有没有更好的方法来做到这一点?

upd:我将找到的解决方案移至“答案”部分。

4

3 回答 3

5

我开始使用 json (Python3 中的 json_dumps,simplejson 不会安装),但瓶子仍在转义单引号。我在 Bottle 手册中发现您可以使用感叹号跳过转义并更改我的代码:

var myNewList = {{!myList}};
于 2012-07-12T20:59:05.143 回答
2

改用json模块;毕竟它会输出有效的 JavaScript 表达式。

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

快速示例:

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

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

于 2012-07-11T07:26:19.447 回答
0

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

myList = [1, 2, 3, '字符串', "&apm;", '"']

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

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

注意:不要用引号将转储的 JSON 值括起来。

于 2012-07-11T07:31:24.997 回答