[英]How to pass JavaScript variable to function in Jinja tag
<script>
function myFunction() {
var name = "some_string";
var display = "{{ python_function(name) }}";
alert(display);
}
</script>
上面的 Javascript 是用 jinja2 模板编写的。 它应该将javascript变量(即var名称)值传递给宏中的python函数。 我知道上面的代码不能解决我的目的,因为我没有将 javascript 变量值正确地传递给宏。 有人有将javascript变量传递给jinja2模板中的宏的方法吗?
您不能以这种方式将值从 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 代码,这将在window
上创建一个全局变量js_fn
,它将采取一些东西和警报它。 单击按钮时,将js_fn
使用常量some_string
调用js_fn
。 如您所见,没有将值从 JS 传递到 Python/Flask。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.