目标:我想将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});
答案 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}};