如何将上下文变量传递到Django中的javascript文件?
这个问题一定很明显,但我想不出来 在模板中,我链接到媒体目录中的js文件。我想从该文件中访问一个上下文变量,如如何将上下文变量传递到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中的全局变量。例如,您的
{{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);