2017-12-18 282 views
-1

我有一个渲染页面,我一个简单的瓶功能:是否可以在render_template之前将数据传递给Flask?

@app.route('/') 
def main_page(): 
    return render_template("index.html") 

我的问题是,是否有可能从它位于我index.html文件传回瓶的main_page功能的JavaScript函数传递变量在它完全呈现之前?

这里是我的html文件:

<head> 
    <title>My Title</title> 
</head> 
<body> 
// HTML content 
<script> 
firebase.auth().onAuthStateChanged(firebaseUser => { 
    if (firebaseUser) { 
     var myVar = "content" 
    } 
}); 
</script> 
</body> 

我想是这样的:

@app.route('/') 
def main_page(): 
    # 1. get the myVar variable from the JS code located in the same index.html page 
    # 2. check the variable and pass a variable to the Jinja template based on myVar's content 
    if myVar is something: 
     return render_template("index.html", text = "something A") 
    else: 
     return render_template("index.html", text = "something B") 

所以我不希望获得来自文本框的内容,我会接受吗通过JS代码。我想加载一次'/'路由,并根据myVar变量的内容决定要传入Jinja模板的数据。如果这是不可能的,是否有任何技巧或替代技术可以产生几乎相同的结果?

+0

我认为你将不得不提交您的状态变化的POST请求到端点并把它传递给模板 – Adam

+0

@Adam这很有趣,我曾与文本框的做到了这一点,当你有渲染页面,那么你获取文本字段的内容并执行一些操作。但在页面加载时无法使其工作。恐怕这是不可能的。 – rihe

+0

我其实误解了这个问题。我没有意识到它是在渲染之前,因此在它服务之前。我想我很好奇,为什么你不处理路由中的变量,然后将它传递到模板上下文 – Adam

回答

1

鉴于您正在访问第三方API并且未将应用程序中的任何数据保存到数据库,因此不需要将HTTP请求发送回瓶型应用程序。状态可以在客户端处理,只需更新HTML w/JQuery即可。

// in callback 
$('target').val('newval'); 
相关问题