使用 Django 模板(列表和字典)将 Python 数据结构转换为 js 数据结构
Posted
技术标签:
【中文标题】使用 Django 模板(列表和字典)将 Python 数据结构转换为 js 数据结构【英文标题】:Python datastructures into js datastructures using Django templates (lists and dicts) 【发布时间】:2012-03-21 18:37:31 【问题描述】:我有一个 Django 视图,它返回一个这样的字典列表
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
我尝试使用以下命令将字典列表转储到 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];
【问题讨论】:
我也有同样的问题,但我的问题是如何将python变量字符串转成js参数?所以在你上面的例子中,python 的 'year' 和 'books' 变量在 js 脚本中是 year 和 book 。你是怎么做到的? 【参考方案1】:这是 django 设计的一部分,旨在阻止用户生成的数据未经转义进入输出。 (XSS预防等)
为了解决这个问题,您需要使用json.dumps()
的组合(在 py>=2.6 中不推荐使用simplejson)来确保输出是 JS 安全的,并使用var data = " data|safe "
来明确告诉 django 不要逃跑该变量的输出。
【讨论】:
如果包含用户生成的数据,请不要使用它;如果在<script>
标记内使用,用户可以使用</script><script>alert('p4wned!')</script>
作为内容的一部分进行突破。将所有尖括号、单引号和 & 符号转义为 JSON \uxxxx
转义代码too!以上是关于使用 Django 模板(列表和字典)将 Python 数据结构转换为 js 数据结构的主要内容,如果未能解决你的问题,请参考以下文章