Django:静态标签内的变量
Posted
技术标签:
【中文标题】Django:静态标签内的变量【英文标题】:Django: Variables inside static tag 【发布时间】: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
错误
【参考方案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 %
标签内使用...
。已更新。以上是关于Django:静态标签内的变量的主要内容,如果未能解决你的问题,请参考以下文章