Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将上下文变量传递到Django中的javascript文件?_Javascript_Django_Templates - Fatal编程技术网

如何将上下文变量传递到Django中的javascript文件?

如何将上下文变量传递到Django中的javascript文件?,javascript,django,templates,Javascript,Django,Templates,这个问题一定很明显,但我想不出来 在模板中,我链接到媒体目录中的js文件。我想从该文件中访问一个上下文变量,如{{my_chart}} 但是语法不同吗??谢谢 我认为这样不可能。如果要访问视图提供的某些数据,必须将其传递给js函数 范例 js文件: my_cool_js_function(some_param){ // do some cool stuff } 看法 希望这有帮助:)除了Andrzej Bobak的答案之外,您还可以从模板生成Javascript中的全局变量。例如,您的

这个问题一定很明显,但我想不出来

在模板中,我链接到媒体目录中的js文件。我想从该文件中访问一个上下文变量,如
{{my_chart}}


但是语法不同吗??谢谢

我认为这样不可能。如果要访问视图提供的某些数据,必须将其传递给js函数

范例

js文件:

my_cool_js_function(some_param){
    // do some cool stuff
}
看法


希望这有帮助:)

除了Andrzej Bobak的答案之外,您还可以从模板生成Javascript中的全局变量。例如,您的模板可能会生成如下代码:

<script>
   var my_chart = {{ the_chart }};
</script>

var my_chart={{the_chart}};

然后,您的脚本可以引用
my_chart

,我还要补充一点,因为我曾多次遇到错误,如果python变量是一个对象,它将抛出语法错误,除非您将它放在引号中,换句话说,放在模板中

<script>
   var my_var = '{{ python_object|escapejs }}';
</script>
最后,在JS中,您可以正确地迭代对象,并像在python中一样使用这些值,方法是:

var my_var_parsed = jQuery.parseJSON(my_var);

现在有了一种更安全的方法,可以使用内置的模板标记
json\u script
将上下文传递到javascript文件,该标记带有一个参数,该参数将是所创建元素的id集

用例将是:

{{ mydata|json_script:"mydata" }}
然后链接您的javascript文件:

<script src="{% static 'myjavascriptfile.js' %}"></script>
来源


记得看看@Brian_Neal这是怎么回事?也就是说,你可以做一些类似于
console.log(我的图表)的事情在javascript文件中,您不必在任何地方声明它?@YPCrumble它在Django生成的html中声明。如果同一个html文件还包含一个外部javascript文件,则该javascript可以引用该变量。这是一个很好的答案,只要在导入js文件之前声明全局变量,就可以了。谢谢。可能有两份
{{ mydata|json_script:"mydata" }}
<script src="{% static 'myjavascriptfile.js' %}"></script>
const mydata = JSON.parse(document.getElementById('mydata').textContent);