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

Mat*_*ock 4 javascript python django django-templates

我有一个Django视图,返回一个像这样的dicts列表

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)
Run Code Online (Sandbox Code Playgroud)

模板文件中有一些基本的JavaScript,可以做到这一点.

var data = "{{data}}";
console.log(data);
//..... Then other functions
Run Code Online (Sandbox Code Playgroud)

问题是数据是通过格式化的JavaScript进入JavaScript,如下所示,引号为'.

{'books': 4, 'year': 2010}, {'books': 7, 'year': 2011}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令将dicts列表转储到python中的json字符串:

simplejson.dumps(data)
Run Code Online (Sandbox Code Playgroud)

但没有快乐.任何修复的建议和想法?人们如何使用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}];
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 8

这是django设计的一部分,用于阻止用户生成的数据进入未转义的输出.(XSS预防等)

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