繁体   English   中英

如何将 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 变量值正确地传递给宏。 有人有将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM