【问题标题】:Run javascript variable in Django templates在 Django 模板中运行 javascript 变量
【发布时间】:2020-09-09 12:23:57
【问题描述】:

我有变量 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

【问题讨论】:

    标签: javascript django django-templates concatenation


    【解决方案1】:

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

    【讨论】:

    • 我不能使用 "{{youmightalsolike.0.title}}" 因为我不知道确切的字符串,它的值来自 onclick("youmightalsolike.0.title") 函数作为字符串。所以请再次阅读我编辑的问题。感谢回复
    • @RoshanOscarSah 我已经进一步编辑了我的答案,希望能增加清晰度。我不是 100% 确定你现在想要达到的目标是什么。我希望以上内容有所帮助。请随时提出更多问题。
    • Nup,我可能不知道如何提问。你能帮我么?我有最后期限,我被困在这个问题上。我们可以使用 Hangouts meet 或 zoom 或任何东西。谢谢
    猜你喜欢
    • 2021-06-14
    • 2021-06-19
    相关资源
    最近更新 更多