Javascript 使用Django模板(列表和dict)将Python数据结构转换为js数据结构

Javascript 使用Django模板(列表和dict)将Python数据结构转换为js数据结构,javascript,python,django,django-templates,Javascript,Python,Django,Django Templates,我有一个Django视图,它返回一个类似这样的dict列表 data = [{'year': 2006, 'books': 54}, {'year': 2007, 'books': 43}, {'year': 2008, 'books': 41}, {'year': 2009, 'books': 44}, {'year': 2010, 'books': 35}] c = { 'data': data, } retu

我有一个Django视图,它返回一个类似这样的dict列表

data = [{'year': 2006, 'books': 54},
        {'year': 2007, 'books': 43},
        {'year': 2008, 'books': 41},
        {'year': 2009, 'books': 44},
        {'year': 2010, 'books': 35}]

c = {
    'data': data,
    }
return render(request, 'template.html', c)
模板文件中有一些基本的JavaScript,可以执行类似的操作

var data = "{{data}}";
console.log(data);
//..... Then other functions
问题在于,数据是通过如下格式的模板进入JavaScript的,模板中的引号为'

{'books': 4, 'year': 2010}, {'books': 7, 'year': 2011}
我尝试使用以下方法将dict列表转储到python中的json字符串中:

simplejson.dumps(data)
但是没有快乐。有没有关于修复的建议和想法?人们如何使用django模板将python数据结构转换成js数据结构

注意:理想情况下,js数据变量如下所示:

var data = [{year: 2006, books: 54},
        {year: 2007, books: 43},
        {year: 2008, books: 41},
        {year: 2009, books: 44},
        {year: 2010, books: 35}];

这是django设计的一部分,旨在阻止用户生成的数据未经扫描进入输出。(XSS预防等)


为了解决这个问题,您需要结合使用
json.dumps()
(在py>=2.6中不推荐simplejson)来确保输出是JS安全的,并且
var data=“{{data | Safe}}”
来明确告诉django不要转义该变量的输出。

我也有同样的问题,但我的问题是如何将python变量字符串转换为js参数?因此,在上面的示例中,python的'year'和'books'变量在js脚本中表示为year和book。您是如何做到这一点的?如果包含用户生成的数据,请不要使用此选项;如果在
标签中使用,用户可以使用
警报('p4owned!')
作为内容的一部分。将所有尖括号、单引号和符号转义为JSON
\uxxx
转义代码!