2015-02-17 82 views
2

here這個問題似乎與我的非常相似;然而,我嘗試了那裏提出的建議,但在我的情況下它不起作用,或許我的問題畢竟是不同的。Django:靜態標籤內的變量

在我的HTML文件(在<script></script>的JavaScript部分),我有:

var snd = new Audio("{% static 'updateMap/cual_es_su_nombre.mp3' %}"); 
snd.play(); 

,其播放MP3就好了;不過,我希望能夠用一個變量替換文件名:cual_es_su_nombre.mp3。我正在從服務器獲取文件名。

所以,我做的第一件事是把文件名加載到一個Javascript數組:

var all_file_names = new Array(); 
{% for item in all_file_names_from_server %} 
    all_file_names.push("{{ item |safe }}"); 
{% endfor %} 

然後,最終,我希望能夠爲例子做:

var snd = new Audio("{% static 'updateMap/'|add:all_file_names[0] %}"); 
snd.play(); 

但是,這是行不通的...

+2

不能混合在Django模板變量的JavaScript變量。他們在完全不同的時間執行。 – 2015-02-17 22:01:34

+0

@ Yuji'Tomita'Tomita,你應該怎麼做? – 2015-02-17 22:05:40

+0

當你這樣做時,你會得到什麼:{%static'updateMap /'| add:all_file_names [0]%} – 2015-02-17 22:14:44

回答

3

Django模板引擎將完全完成呈現頁面,然後將其傳遞給瀏覽器。你可以用它來編寫Javascript,但是你不能從Javascript或者依賴Javascript數據結構的方式訪問它。我認爲你最好的選擇是構建一個已解析的靜態URL數組,而不僅僅是一個文件名數組(如果你不需要這兩個數組的話可能不是這個數組)。喜歡的東西:

var all_file_names = new Array(); 
{% for item in all_file_names_from_server %} 
    all_file_names.push("{{ item |safe }}"); 
    all_file_uris.push("{% static 'updateMap/'|add:item|safe %}"); 
{% endfor %} 

然後:

var snd = new Audio(all_file_uris[0]); 
snd.play(); 
+0

當我做'all_file_names_static.push(「{%static'updateMap /'| add :{{item | safe}}%}「);'我得到'期望的過濾器參數錯誤! – 2015-02-17 23:06:04

+0

在瀏覽器中,我得到:'add需要1個參數,0提供' – 2015-02-17 23:09:07

+0

哦,沒錯,不需要在{%static%}標籤中使用{{...}}。更新。 – 2015-02-17 23:09:31