如何读取Javascript中的Python列表[在Django模板中]

如何读取Javascript中的Python列表[在Django模板中],javascript,python,django,otree,Javascript,Python,Django,Otree,我在oTree中编程(这是一个基于Django的社会实验环境),我有以下问题。我在Python中定义了一些列表,我想导入它们并在HTML模板中使用它们。如果我用HTML打印它们,我会设法毫无问题地看到它们,但是,一旦我需要在Javascript中使用它们,程序将无法读取它们,列表元素的单引号将转换为'。 列表是这样导入的var filtered_elements={{array} 我认为问题就在这里,因为JS无法处理它们。你对怎么做有什么建议吗?我考虑过使用JSON,但由于我对编程非常陌生

我在oTree中编程(这是一个基于Django的社会实验环境),我有以下问题。我在Python中定义了一些列表,我想导入它们并在HTML模板中使用它们。如果我用HTML打印它们,我会设法毫无问题地看到它们,但是,一旦我需要在Javascript中使用它们,程序将无法读取它们,列表元素的单引号将转换为
'。
列表是这样导入的
var filtered_elements={{array}

我认为问题就在这里,因为JS无法处理它们。你对怎么做有什么建议吗?我考虑过使用JSON,但由于我对编程非常陌生,我无法理解这是浪费时间还是有更简单的解决方法。
谢谢你的回答

听起来您的数据已经是JSON了,否则您将得到单引号和
u
前缀。所以唯一的问题是Django自动转义;您可以使用
safe
过滤器禁用它:

var filtered_elements = {{ array|safe }};
您的数据应该是JSON,而不是直接将Python列表放入联系人中,而是将
“array”:JSON.dumps(array)
放入上下文字典中

JSON字符串不需要在标记中转义HTML,但它确实需要JS转义!否则,如果JSON包含用户数据,则某些字符串可能会包含类似以下内容的内容:
这里绝对有任何内容……
来运行任意JavaScript

因此,请使用escapejs

var filtered_elements = {{ array|escapejs}};

同意。顺便说一句,在python方面,当您调用render(或任何类似方法)时,请记住使用
json.dumps()
(ujson或simplejson)。json是以javascript为导向的,它提供了一个符合js的数据序列化。我不明白,它更可取的是“安全”还是“转义”,有什么区别?通常Django会自动应用HTML转义,这就是您所看到的(
'
&39;
等等)。JavaScript不是HTML,所以您不需要它
|safe
仅将字符串标记为已转义,因此不会对其应用转义
|escapejs
标记中应用JS所需的转义类型。所以这就是你需要的。谢谢,它看起来真的很有效。我的印象是,它可能已经在使用JSON在模块和模板之间存储数据了,但我还不是非常确定。。。