Django - 将变量传递给同一脚本标签内的 javascript 文件

Posted

技术标签:

【中文标题】Django - 将变量传递给同一脚本标签内的 javascript 文件【英文标题】:Django - passing variable to javascript file within same script tag 【发布时间】:2018-02-16 20:59:29 【问题描述】:

我正在尝试将我的变量从 Django 的视图传递到一个 javascript 文件。我在这里阅读了堆栈问题 (How can I pass my context variables to a javascript file in Django?) 以获得一些指导,但我正在尝试一些不同的东西。我想将变量传递给该特定 javascript 引用脚本标记中的 javascript 文件或更改变量声明的顺序。通过示例更容易展示:

我的 somerandom.js:

console.log(variable);

工作原理

% extends base.html %
% load static %
% block body %
    <h1> Hello, World! </h1>
% endblock body %
% block javascript %
    <script>
      var variable =  my_var ;
    </script>
    <script src="% static "app1/bootstrap/js/somerandom.js" %"></script>
% endblock javascript %

什么不起作用

编辑:它不起作用,因为在开发人员工具中(在 Chrome 中按 F12)我看到了这个错误:Uncaught ReferenceError: variable is not defined

1:

% extends base.html %
% load static %
% block body %
    <h1> Hello, World! </h1>
% endblock body %
% block javascript %
    <script src="% static "app1/bootstrap/js/somerandom.js" %"></script>
    <script>
      var variable =  my_var ;
    </script>
% endblock javascript %

2:

% extends base.html %
% load static %
% block body %
    <h1> Hello, World! </h1>
% endblock body %
% block javascript %
    <script src="% static "app1/bootstrap/js/somerandom.js" %">
      var variable =  my_var ;
    </script>
% endblock javascript %

我希望这两个工作的原因是,一旦我的代码变长,我就可以正确地组织和引用我的变量。在这个链接(http://www.mutaku.com/wp/index.php/2012/03/accessing-django-template-variables-in-javascript/)中,它表明我们可以在引用 javascript 文件后声明变量。

【问题讨论】:

什么不起作用?你能给我们一个错误字符串或一些堆栈跟踪吗?你看到的“错误”是什么? 我添加了我看到的错误消息。基本上它说“未定义变量”。 如果您的somerandom.js 尝试访问variable,则在您稍后声明时收到此错误是正常的。我非常怀疑您链接到的页面中的方法是否有效。 somerandom.js 正在访问变量(它基本上通过控制台输出变量内容)。有什么方法可以让我在任何地方声明它吗?我希望它只被 somerandom.js 文件而不是其他文件调用。 当你在这个例子中全局声明一个 JS 变量时,无论你如何包含它,所有函数都可以访问它,即。您的方法 (2) 与 (1) 没有什么不同。 【参考方案1】:

当您使用带有 src= ...content&lt;script&gt; 标签时,行为是未定义的,并且与您正在使用的浏览器密切相关:例如使用 chrome脚本从src=... 加载,&lt;script&gt; 的内容被忽略 但是强烈建议不要使用它

【讨论】:

【参考方案2】:

用双引号将 Django 变量括起来对我有用。然后在变量声明之后调用 .js 文件。

<script>
    var variable = " my_var ";
</script>
<script type="text/javascript" src="% static ... %"></script>

这是因为console.log( my_var ) 不会将变量打印到控制台,但console.log(" my_var ") 会打印它。

【讨论】:

以上是关于Django - 将变量传递给同一脚本标签内的 javascript 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 Javascript 变量传递给 Django 标签

Django 将变量传递给 URL 标签

将 Django 表单传递给模板标签

将 django 模板变量传递给 js 数据表

如何在 Django 2.1 中的模板内的 for 循环内设置变量?

如何将json目录传递给django框架内的模板?