Django:静态标签内的变量

Django: Variables inside static tag

这个问题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();

然而,这不起作用...

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