2014-02-07 37 views
21

如何將jinja2數據傳遞到javascript中。 我有一個燒瓶REST的網址爲/logs/<test_case_name> 我想用.getJSON()來查詢上面的URL,因此想要將具有testcasename的jinja2數據傳遞給.getJSON函數。無法將jinja2變量傳遞到javascript代碼段

示例代碼:

<script type="text/javascript"> 
    alert({{name}}); 
</script> 

它不工作。 有什麼建議嗎?

+2

'{{名稱|安全} }'應該工作 –

+0

@JakobBowyer - 它力rk :( – deeshank

+0

它通常是一個壞主意,混合模板語言與JavaScript。另一種方法是使用html作爲代理 - 將名稱存儲在元素中,如,然後在javascript中執行djangoData = $('#my-data')。data(); – rikAtee

回答

34

不是在一個封裝字符串變量等,備選是jQuery的利潤:

它通常是一個壞主意用JavaScript混合模板語言。另一種方法是使用HTML作爲代理 - 存儲的名稱中的一個元素,像這樣

<meta id="my-data" data-name="{{name}}" data-other="{{other}}"> 

然後在JavaScript做

var djangoData = $('#my-data').data(); 

這個有優勢:

  • 的javascript不再依賴於.html頁面
  • jquery強制隱含數據
+0

謝謝@rikAtee。我遵循相同的邏輯..只是我用普通的div來代替。 – deeshank

+0

它的工作原理,但我認爲這是一個非常矯枉過正的方法 - 你的html文件會臃腫的數據屬性,我認爲下面的答案(ndpk的)是一個更好的方法 – jonprasetyo

+0

Niiii​​ce!現在我完全可以從* javacript *中分離出* html *。這將使我與Flask-Assets整合。謝謝! –

42

嘗試用引號:

alert("{{name}}"); 
+3

做到了神奇! :) – deeshank

+5

我認爲這不起作用,如果'name'包含換行符如'\ n'。它會拋出一個JavaScript語法錯誤。 –

0

這是我做的

我的HTML元素

<!--Proxy Tag for playlist data--> 
<meta id="my_playlist_data" data-playlist="{{ playlist }}"> 

我的腳本元素

// use Jquery to get data from proxy Html element 
var playlist_data = $('#my_playlist_data').data("playlist"); 

.data() documenttation更多