Django:静态标记内的变量

时间:2015-02-17 21:40:44

标签: django django-templates django-staticfiles

问题here似乎与我的非常相似;然而,我尝试了那里的建议,但它在我的情况下没有用,所以也许我的问题毕竟不同。

在我的html文件中(在Javascript部分的<script></script>中),我有:

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();

然而,这不起作用......

1 个答案:

答案 0 :(得分: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();