2015-02-17 45 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