2011-03-27 98 views
2

我用Django將字典中的變量傳遞給HTML模板沒有任何問題。現在我打算在HTML文件中添加一些JavaScript,並使用「{{}}」相同的方式從javascript中的字典中獲取對象。字典中的所有對象實際上都是字符串。 在Django中,代碼:如何將字符串從Django傳遞到javascript

dataDict = {} 
dataDict["time"] = json.dumps(",".join(timeList)) 
return render_to_response("xxxx.html", dataDict,\ 
     context_instance=RequestContext(request)) 

而在HTML頁面和Javscript,我只是想用一個字符串變量接受它,然後解決我想要的信息,而我們的代碼是:

var test = {{ time }}; 

但似乎Django無法將數據傳遞給Javascript中的字符串變量。所以我有兩個問題:

  1. 是否有一些特殊類型的變量將數據從Django傳遞到Javascript。 JSON有可能嗎?或者是否必須在傳遞給Javascript之前先將字符串轉換爲Django中的JSON字符串?
  2. 如何使用JavaScript中的字符串傳遞?顯然只是使用var xx = xxxx;不起作用。我們認爲我們可以傳遞數據,但似乎無法處理。

沒有任何人有關於它的一些想法?

謝謝!

回答

6

也許你只是需要將其雙引號?

var test = "{{time}}";

讓我們假設dataDict['time'] = "1:30 PM, 2:30 PM"。當你的模板呈現它創建了一個文本(驗證自己瓦特/查看源代碼):

var test = 1:30 PM, 2:30 PM; 

正如你所看到的,這不是有效的JavaScript。當你雙引號它,它變成這樣:

var test = "1:30 PM, 2:30 PM"; 

同樣,你要雙引號通過插值的屬性,例如,<a href="{{url}}">..</a>您的DOM元素。 Django builtin template filter docs有很多這樣的例子。

重要的是要記住模板評估/渲染時間之間的區別在你的Python環境和JavaScript的瀏覽器執行/評估的時候,尤其是當你試圖在二者之間傳遞數據是很重要的。

+0

謝謝。它運作良好。但是,你能告訴我,爲什麼它需要「」,因爲我覺得{{時間}}只是傳遞一個對象的JavaScript,那麼什麼是兩個對象的意思「?它是一個字符串? – LuciferTian2010 2011-03-27 18:36:43

+0

完成,我已經添加更詳細的我最初的帖子。希望它有幫助。 – 2011-03-27 22:04:00

1

轉換成JSON爲了防止事情,如虛假</script>含串從造成的JavaScript問題的建議。由於JSON字符串看起來像JavaScript文字,因此分配應該足夠了。

+0

而對於簡單的賦值語句存在'escapejs'濾波器:'escapejs( '<>') - >的u '\\ u003C \\ u003E'' – 2011-08-23 10:56:27

+0

@Tomasz:當然可以,但'\ u003C \ u003E'仍然ISN'沒有引號的有效JavaScript。 – 2011-08-23 20:14:24

相關問題