use*_*936 26 javascript django templates
这个问题必须明显,但我无法弄清楚.
在模板中,我链接到媒体目录中的js文件.从该文件中,我想访问像{{my_chart}}这样的上下文变量.
但是语法不同吗?谢谢!!
Bri*_*eal 25
除了Andrzej Bobak的回答,您还可以从模板中生成Javascript中的全局变量.例如,您的模板可能会生成如下代码:
<script>
var my_chart = {{ the_chart }};
</script>
Run Code Online (Sandbox Code Playgroud)
然后你的脚本可以参考my_chart.
And*_*bak 23
我认为不可能这样.如果要访问视图提供的某些数据,则必须将其传递给js函数.
例
js文件:
my_cool_js_function(some_param){
// do some cool stuff
}
Run Code Online (Sandbox Code Playgroud)
视图
// some html code
my_cool_js_function({{param}})
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
我还要补充一下,因为我多次遇到错误,如果python变量是一个对象,除非您将其放在引号中,换句话说,在模板中,否则它将引发语法错误,
<script>
var my_var = '{{ python_object|escapejs }}';
</script>
Run Code Online (Sandbox Code Playgroud)
此外,在将该对象放入上下文之前,最好先将其序列化为JSON,否则最终将不得不进行字符串解析。我还发现在此步骤之前,日期对象需要转换为字符串。
import jsonpickle
context['python_object'] = jsonpickle.encode(python_object)
Run Code Online (Sandbox Code Playgroud)
最后,在JS中,您可以通过以下操作正确地遍历对象,并使用python中可能具有的值:
var my_var_parsed = jQuery.parseJSON(my_var);
Run Code Online (Sandbox Code Playgroud)
现在有一种更安全的方法可以使用json_script带有参数的内置模板标记将上下文传递给 javascript 文件,该参数将是为创建的元素设置的 id。
用例是:
{{ mydata|json_script:"mydata" }}
Run Code Online (Sandbox Code Playgroud)
然后链接您的 javascript 文件:
<script src="{% static 'myjavascriptfile.js' %}"></script>
Run Code Online (Sandbox Code Playgroud)
我猜脚本标签必须在模板标签之后
然后可以在您的 javascript 文件中访问它,例如:
const mydata = JSON.parse(document.getElementById('mydata').textContent);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21874 次 |
| 最近记录: |