【问题标题】:Flask passing a function but the function gets rendered everytimeFlask传递一个函数,但该函数每次都被渲染
【发布时间】:2025-12-20 11:35:10
【问题描述】:

我有一个名为 lock(id) 和 unlock() 的烧瓶函数

def lock(roomId):
    RoomTDG.update(roomId,True)

def unlock(roomId):
    RoomTDG.update(roomId, False)

我在我的模板中调用它

{{ lock(1) }}

然而,这段代码总是被渲染,不管它是在 jquery if 语句中还是在外部。当它进入 if 语句时如何调用它

$('#room1').click(function() {
              "{{ lock(1) }}"
              alert("hello");
          });

【问题讨论】:

    标签: javascript jquery python flask jinja2


    【解决方案1】:

    Javascript 代码(JQuery 或其他)在浏览器中运行,{{ lock(1) }} 表达式在服务器上呈现。创建要发送到浏览器的模板必须 执行该功能,模板中的 Javascript 代码不会在服务器上执行,也不会影响 {{ lock(1) }} 输出的内容。

    只有 "None",即模板中的结果输出,可以被 JavaScript 代码看到。

    您必须在 Flask 服务器中创建一个新路由,然后 jQuery 代码会通过 AJAX 调用该路由(例如,使用 jQuery.get())。

    【讨论】:

    • 那么如果房间1被点击,我怎么能调用lock(1),pleaseeeeeee??
    • 什么意思?? @马丁彼得斯
    • @user3450754:我包含了文档参考;例如,您可以阅读 AJAX 是什么。
    • @user3450754:但是,关于如何执行 AJAX 请求的完整教程超出了我的回答范围。
    • @user3450754:在同一主题上查看另一个问题:Jinja2 : call function on click