javascript - 如何将 Python 变量/Jinja2 模板传递给 JavaScript 文件?
问题描述
我知道您可以将变量传递给您的 html 中的内联 javascript,就像在这个问题中一样:
<script type="text/javascript">
function test_func(data) {
console.log(data);
}
test_func({{ data|safe }})
</script>
但是如何将这些数据传递给 javascript 文件中的函数呢?
我想test_func({{ data|safe }})
从文件中调用:
<script src="{{ url_for('static', filename='scripts/highcharts.js') }}"></script>
解决方案
如果您的 js 代码使用模块系统,则有更优雅的方法可以做到这一点,但如果我正确理解您的情况,这是一种方法:
<div>blah blah</blah>
<script>
var window.myData = window.myData = {{ data|tojson }};
</script>
...从您的评论中听起来您正在修改highcharts.js
,我原以为这将是一个不可修改的第 3 方文件。但假设你可以修改它,里面highcharts.js
会是这样的:
test_func(window.myData);
这假设您myData
可以安全地在页面上的所有 js 中全局共享。
另请注意,要使其正常工作,您必须确保在运行window.myData
之前已填充highcharts.js
。您不应为此依赖异步偶然事件,而应确保始终根据 js 加载规则以正确的顺序加载代码。这是使用某种风格的 js 模块可以解决的另一件事。
转义注意事项:
请注意,我使用的是这里tojson
而不是。safe
这是 3 分钟谷歌搜索的结果,可能是错误的。但关键是我认为safe
这可能不是您想要的,这似乎完全关闭了转义。除非您有信心知道data
没有潜在的 XSS 样式攻击字符串,否则您可能希望在这里转义 javascript,而不是 HTML 转义,这可能是默认设置。不过,我不是专家。
推荐阅读
- python - 克里金法(高斯过程回归)错误太高,看不到图
- python - 使用一个数据框单元格值从另一个数据框检索信息
- c++ - 告诉 gdb 在单步执行时跳过 _only_ std
- javascript - 在 iframe 中操作 DOM 元素
- data-structures - 什么是数据结构中的堆栈以及它与队列有何不同?
- interpolation - 概率程序,Figaro,Metropolice-Hastings 算法的贝叶斯线插值
- gradle - Gradle 战争构建目录
- google-sheets - 如果来自不同列表的名称与这些列中的任何名称匹配,则将多列导入到 1 列的公式
- c - 如何使用 qemu 对算法进行分析
- java - 春季启动调用异步,而其他人正在进行中