如何将 JavaScript 变量传递给 Jinja 标签中的函数

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 变量值正确传递给宏。有人有在 jinja2 模板中将 javascript 变量传递给宏的方法吗?

您不能以这种方式将值从 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 是字符串的恒等函数:它是一个一元函数,接受一个字符串并立即 returns 它。然后,评估 "py_fn('some_string')" 的结果将是字符串 'some_string',它将被替换回去,得到最终的,所谓的 "rendered" 模板:

<body>
    <button onclick="js_fn('some_string')">Click me</button>
    <script>
        function js_fn(variable) {
            alert(variable);
        }
    </script>
</body>

此字符串将成为请求响应主体的一部分,因此浏览器将转储 window 上的按钮,评估脚本块内的 js 代码,这将创建一个全局变量 js_fnwindow 上,这将采取一些措施并提醒它。单击该按钮时,将始终使用常量 some_string 调用 js_fn。如您所见,没有将值从 JS 传递到 Python/Flask.