<script>
function myFunction() {
var name = "some_string";
var display = "{{ python_function(name) }}";
alert(display);
}
</script>
以上Javascript是在jinja2模板中编写的。它应该将javascript变量(即var name)值传递给宏中的python函数。我知道上面的代码不能解决我的目的,因为我没有正确地将javascript变量值传递给宏。有人在jinja2模板中有将javascript变量传递给宏的方法吗?
答案 0 :(得分:2)
您无法将值从javascript传递到模板,因为模板将在响应返回浏览器之前呈现,以便javascript引擎进行评估。模板渲染器能够解析javascript代码中指定的name
值的唯一方法是解释<script></script>
中嵌入的字符串。
<强>更新即可。让我们来看你的第二次尝试,你说的那次尝试。你有:
<body>
<button onclick="js_fn('{{ py_fn('some_string') }}')">Click me</button>
<script>
function js_fn(variable) {
alert(variable);
}
</script>
</body>
据推测,这有些偏见(例如 _index.html )。范围py_fn
的视图,加载 _index.html ,评估字符串“py_fn('some_string')”,并将{{ py_fn('some_string') }}
替换为该评估的结果。假设py_fn
是字符串上的标识函数:它是一个一元函数,它接受一个字符串并立即返回它。然后,评估“py_fn('some_string')”的结果将是字符串'some_string'
,它将被替换回来,获得最终的,所谓的“渲染”模板:
<body>
<button onclick="js_fn('some_string')">Click me</button>
<script>
function js_fn(variable) {
alert(variable);
}
</script>
</body>
此字符串将成为请求响应主体的一部分,因此浏览器将转储窗口上的按钮,评估脚本块内的js代码,这将在{上创建全局变量js_fn
{1}},它会采取一些措施并提醒它。单击该按钮,将始终使用常量window
调用js_fn
。如您所见,JS中没有值传递给Python / Flask。