2017-12-18 350 views
0

目標:我想傳遞Django中的字符串列表以將JS作爲字符串數組模板並獲取數組中的每個字符串的索引。將Django的字符串列表傳遞給JS作爲數組

問題:Javascript indexOf()正在計算每個字符(例如字母,單引號和括號)。我在下面的嘗試是基於this,thisthis

代碼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}); 
+1

'VAR陣列=「 {{list}}「;'退出模板過程如下:'var array =」[\「first \」,\「second \」]「;'。這就是說它是一個字符串,而不是一個數組。 – Kendas

+0

您可以使用eval將字符串轉換爲javascript中的對象 – Harsha

+0

如果您嘗試從前端向後端發送json對象 - 爲什麼不首先使用由django rest框架構建的REST API呢? –

回答

0

正如肯達提到了一個評論,這一點:

var array = "{{list}}"; 

會讓array包含列表的表示形式的字符串(無論是Python列表本身或者它的JSON表示)。你想要的是甩掉你列表JSON(以確保你有你的Python列表的本地JavaScript表示),你已經嘗試過,並避免在JS代碼片段添加引號:

var array = {{list}}; 
+0

非常感謝!我實際上沒有用雙引號試過,但是我的'JSLint'返回錯誤...經驗教訓:不要盲目追蹤linter告訴你的東西:) – useruser

相關問題