将Django字符串列表作为数组传递给JS

时间:2017-12-18 10:31:27

标签: javascript python arrays json django

目标:我想将Django中的字符串列表传递给模板JS作为字符串数组,并获取数组中每个字符串的索引。

问题:Javascript indexOf()正在计算每个字符(例如字母,单引号和括号)。我在下面的尝试基于thisthisthis

代码1 :我尝试了escapejssafe过滤器,但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});

2 个答案:

答案 0 :(得分:2)

另一种选择是使用join将Python字符串列表转换为字符串:

list = ','.join(list)
return render(request, template, {'list': list})

,然后使用模板中的JS再次split

var array = "{{ list }}".split(',');

答案 1 :(得分:0)

正如肯达在评论中提到的那样:

var array = "{{list}}";

将使array成为包含列表表示的字符串(Python列表本身或其json表示)。你想要的是将你的列表转储到json(以确保你有一个Python列表的原生javascript表示),因为你已经尝试过避免在JS片段中添加引号:

var array = {{list}};