【发布时间】:2012-01-30 19:40:10
【问题描述】:
这个问题一定很明显,但我想不通。
在模板中,我链接到我的媒体目录中的一个 js 文件。从该文件中,我想访问像 {{my_chart}} 这样的上下文变量。
但是语法不同吗?谢谢!!
【问题讨论】:
标签: javascript django templates
这个问题一定很明显,但我想不通。
在模板中,我链接到我的媒体目录中的一个 js 文件。从该文件中,我想访问像 {{my_chart}} 这样的上下文变量。
但是语法不同吗?谢谢!!
【问题讨论】:
标签: javascript django templates
除了 Andrzej Bobak 的回答之外,您还可以从模板中生成 Javascript 中的全局变量。例如,您的模板可能会生成如下代码:
<script>
var my_chart = {{ the_chart }};
</script>
然后您的脚本可以引用my_chart。
【讨论】:
console.log(my_chart); 的操作,而不必在任何地方声明它?
我认为这是不可能的。如果你想访问视图提供的一些数据,你必须将它传递给js函数。
例子
js文件:
my_cool_js_function(some_param){
// do some cool stuff
}
查看
// some html code
my_cool_js_function({{param}})
希望这会有所帮助:)
【讨论】:
我还要补充一点,因为我遇到了几次错误,如果 python 变量是一个对象,它将引发语法错误,除非你把它放在引号中,换句话说,在你的模板中,
<script>
var my_var = '{{ python_object|escapejs }}';
</script>
此外,在将该对象放入上下文之前,最好先将其序列化为 JSON,否则您最终将不得不进行字符串解析。我还发现在此步骤之前需要将日期对象转换为字符串。
import jsonpickle
context['python_object'] = jsonpickle.encode(python_object)
最后,在 JS 中,您可以正确地遍历对象并使用您在 python 中可能拥有的值:
var my_var_parsed = jQuery.parseJSON(my_var);
【讨论】:
现在有一种更安全的方法可以使用内置模板标签 json_script 将上下文传递给 javascript 文件,其参数将是为创建的元素设置的 id。
用例是:
{{ mydata|json_script:"mydata" }}
然后链接你的javascript文件:
<script src="{% static 'myjavascriptfile.js' %}"></script>
脚本标签必须在我猜测的模板标签之后
然后可以在您的 javascript 文件中访问,例如:
const mydata = JSON.parse(document.getElementById('mydata').textContent);
【讨论】: