在Django模板中运行javascript变量

时间:2020-05-22 15:45:03

标签: javascript django django-templates concatenation

我有变量bbb =“ youmightalsolike.0.title”;在Django模板文件的javascript中。我想在变量bbb中添加{{和}},就像我在aaa中所做的那样,它可以与我想要的输出42 完美地运行。

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

我尝试使用这些没有用的东西。也许我不知道来证实。 再次,我不知道确切的值是什么,所以我不能直接写{{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

1 个答案:

答案 0 :(得分:0)

在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%地确定您要达到的目标,但是我希望以上内容能对您有所帮助。