<script>
function myFunction() {
var name = "some_string";
var display = "{{ python_function(name) }}";
alert(display);
}
</script>
上面的 Javascript 是用 jinja2 模板编写的。它应该将 javascript 变量(即 var 名称)值传递给宏中的 python 函数。我知道上面的代码不会解决我的目的,因为我没有将 javascript 变量值正确传递给宏。有人有在 jinja2 模板中将 javascript 变量传递给宏的方法吗?
最佳答案
您不能以这种方式将值从 javascript 传递到模板,因为模板将在响应返回到浏览器以供 javascript 引擎评估之前呈现。模板渲染器能够解析 name
值的唯一方法在 javascript 代码中指定的是解释嵌入在 <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
的 View 在范围内,加载 _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>
此字符串将成为请求响应主体的一部分,因此浏览器会将按钮转储到窗口上,评估脚本 block 内的 js 代码,这将创建一个全局变量 js_fn
在 window
上,这将采取一些东西并提醒它。单击该按钮时,将调用 js_fn
与常量 some_string
, 总是。如您所见,没有从 JS 到 Python/Flask 的值传递。
关于javascript - 如何将 JavaScript 变量传递给 Jinja 标签中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390539/