2012-03-03 59 views
4

我有一個返回值,像這樣Python的數據結構到使用Django模板(列表和類型的字典)JS數據結構

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) 

模板文件類型的字典列表Django視圖中有一些基本的JavaScript,做這樣的事情。

var data = "{{data}}"; 
console.log(data); 
//..... Then other functions 

的問題是,該數據通過格式化像下面&#39的報價模板進入JavaScript的。

{'books': 4, 'year': 2010}, {'books': 7, 'year': 2011} 

我試着在使用Python類型的字典列表轉儲到JSON字符串:

simplejson.dumps(data) 

,但沒有喜悅。任何修復建議和想法?人們如何使用Django模板

注意得到蟒蛇的數據結構到JS數據結構:理想情況下,JS數據變量應該是這樣的:

var data = [{year: 2006, books: 54}, 
     {year: 2007, books: 43}, 
     {year: 2008, books: 41}, 
     {year: 2009, books: 44}, 
     {year: 2010, books: 35}]; 
+0

我有同樣的問題,但我的問題是如何將python變量字符串變成js參數?所以在上面的例子中,python的'year'和'books'變量在js腳本中是year和book。你是怎麼做的? – Mark 2014-04-13 14:48:50

回答

8

這是Django的設計,以阻止進入輸出用戶產生的數據的一部分轉義。 (XSS預防和這樣)

要解決這個問題,你將要使用的json.dumps()組合(simplejson在PY> = 2.6不再支持),以確保輸出爲JS安全,並var data = "{{ data|safe }}"明確告訴Django不要逃避該變量的輸出。

+0

謝謝托馬斯這個模板過濾器完美的作品! – 2012-03-03 16:49:59

+1

如果包含用戶生成的數據,請不要使用它;如果在''作爲內容的一部分。將所有的角度包,單引號和&符號都轉義爲JSON'\ uxxxx'轉義代碼*! – 2014-04-13 15:24:39