【问题标题】:Django: Variables inside static tagDjango:静态标签内的变量
【发布时间】:2015-04-18 17:53:03
【问题描述】:

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 变量。它们在完全不同的时间执行。
  • @Yuji'Tomita'Tomita,你建议我该怎么做?
  • 执行此操作会得到什么:{% static 'updateMap/'|add:all_file_names[0] %}
  • @joelgoldstick,我得到expected %} 错误,如果我创建一个变量:var test = 'something'; var snd = new Audio("{% static 'updateMap/'|add:test %}"); 我得到一个variableDoesNotExist 错误

标签: django django-templates django-staticfiles


【解决方案1】:

在将页面传递给浏览器之前,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();

【讨论】:

  • 当我执行all_file_names_static.push("{% static 'updateMap/'|add:{{ item|safe }} %}"); 时,我得到Expected filter argument 错误!
  • 在我得到的浏览器上:add requires 1 arguments, 0 provided
  • 哦,对了,不需要在{% static %} 标签内使用{{...}}。已更新。
猜你喜欢
  • 1970-01-01
  • 2013-05-15
  • 2019-04-12
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2016-04-12
  • 2013-06-21
  • 2018-03-06
相关资源
最近更新 更多