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:静态标签内的变量的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板层 静态文件

Django:条件模板标签内的图像

Django无效的块标签:'静态'

Django:静态标签是不可能变成块标签的吗?

Django 1.6.1:静态标签不起作用

Django静态模板标签不显示SVG