首页 > 解决方案 > 在 Django 模板中运行 javascript 变量

问题描述

我有变量 bbb = "youmightalsolike.0.title"; 在 django 模板文件的 javascript 中。我想在变量 bbb 中添加 {{ 和 }},就像我在 aaa 中制作的那样,例如它与我想要的输出 42完美运行。

        var aaa = {{youmightalsolike.0.title}};
        console.log("aaa = "+aaa);              //aaa = 42

我试过使用这些没用的。也许我不知道要concantinate。同样,我不知道确切的值是什么,所以我不能直接写 {{youmightalsolike.0.title}}因为这个值“youmightalsolike.0.title”必须来自 onclick 函数。

        var bbb = "youmightalsolike.0.title";
        console.log("bbb = "+bbb);              //bbb = youmightalsolike.0.title
        var ccc = "{{bbb}}"; 
        console.log("ccc = "+ccc);              //ccc = undefined

标签: javascriptdjangodjango-templatesconcatenation

解决方案


当您在 django 模板中将变量分配给 javascript 时,在适当的地方添加语音标记非常重要。

如果youmightalsolike.0.title是在上下文中传递的 python 变量:

django 模板语言也会生成一个 javascript 文件,就像你告诉它的那样。因此,例如,如果youmightalsolike.0.title等于"Gladiator",这将导致(在 django 呈现您的模板之后):

var bbb = "youmightalsolike.0.title"
console.log("bbb = "+bbb);              //bbb = youmightalsolike.0.title
var ccc = Gladiator;            //here you're setting ccc to undefined
console.log("ccc = "+ccc);

现在,除非您在 javascript 中进一步定义了一些名为 Gladiator 的变量,这就是未定义 ccc 的原因。

要纠正此问题,您需要做的是:

var bbb = "{{youmightalsolike.0.title}}";

渲染时,这将导致:

var bbb = "gladiator"

这将为您提供所需的结果。

编辑:如果youmightalsolike.0.title来自 javascript 事件:

在这种情况下,您根本不需要使用 django 模板语言。django 所做的所有渲染都发生在服务器端。它会生成一些 HTML 或 javascript(或任何类型的文本)。然后将其发送到客户端并作为网站加载。从此时起,Django 不再涉及任何内容(除了 API 调用),因此您想要对变量执行的任何操作都应该是纯 JavaScript。您将无法在内部{{...}}或模板标签中使用任何模板变量。

我不再 100% 确定您要达到的目标,但我希望以上内容有所帮助。


推荐阅读