将Django的字符串列表传递给JS作为数组
问题描述:
目标:我想传递Django中的字符串列表以将JS作为字符串数组模板并获取数组中的每个字符串的索引。将Django的字符串列表传递给JS作为数组
问题:Javascript indexOf()
正在计算每个字符(例如字母,单引号和括号)。我在下面的尝试是基于this,this和this。
代码1:我尝试escapejs
和safe
过滤器,但indexOf()
在数组中返回2的第一项(应为0)。
#views.py
list = [#utf-8 encoded strings]
return render(request, template, {'list': list})
#template JS
$('#id').ready(function() {
var array = "{{list|escapejs}}";
console.log(array.indexOf('{{obj}}'));
#obj is item in list});
代码2:也试过用json.dumps()
或encode('utf8')
但json.loads()
的问题仍然存在。
#views.py
list = [#utf-8 encoded strings]
list = json.dumps(list, ensure_ascii=False).encode('utf8')
return render(request, template, {'list': list})
#template JS
$('#id').ready(function() {
var array = "{{list}}";
console.log(array.indexOf('{{obj}}'));
#obj is item in list});
答
正如肯达提到了一个评论,这一点:
var array = "{{list}}";
会让array
包含列表的表示形式的字符串(无论是Python列表本身或者它的JSON表示)。你想要的是甩掉你列表JSON(以确保你有你的Python列表的本地JavaScript表示),你已经尝试过,并避免在JS代码片段添加引号:
var array = {{list}};
+0
非常感谢!我实际上没有用双引号试过,但是我的'JSLint'返回错误...经验教训:不要盲目追踪linter告诉你的东西:) – useruser
'VAR阵列=“ {{list}}“;'退出模板过程如下:'var array =”[\“first \”,\“second \”]“;'。这就是说它是一个字符串,而不是一个数组。 – Kendas
您可以使用eval将字符串转换为javascript中的对象 – Harsha
如果您尝试从前端向后端发送json对象 - 为什么不首先使用由django rest框架构建的REST API呢? –