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

标签 javascript python jinja2

<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_fnwindow 上,这将采取一些东西并提醒它。单击该按钮时,将调用 js_fn与常量 some_string , 总是。如您所见,没有从 JS 到 Python/Flask 的值传递。

关于javascript - 如何将 JavaScript 变量传递给 Jinja 标签中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390539/

相关文章:

javascript - 将 HTML Canvas 保存到图像将无法正常工作

python - Scala相当于python echo服务器/客户端示例?

python - Jinja 变量在 for 循环中未正确设置

javascript - Python 和 Angular 在变量值上存在分歧

python - Flask-WTForms:如何检查是否需要一个字段?

javascript - 在组件外部使用 redux 钩子(Hook)来实现代码的可重用性

javascript - 如何使用按键绑定(bind)和选定的文本建立链接

javascript - 使用 AngularFire 创建用户并调用工厂来显示通知

python - 属性错误: Event instance has no attribute 'delete'

python - 在 python 中同时剥离和拆分