问题是在我收到请求并将值分配给变量之后,msg
我的模板login.html
仍然为空,我想看到消息='知道了'。
app.py
from flask import Flask, render_template, redirect, url_for, request
app = Flask(__name__)
@app.route('/req', methods=['GET', 'POST'])
def req():
msg = None
if request.method == 'POST':
if request.values.get('name', None) == 'asdf':
msg = 'got it'
#print msg - variable msg = 'got it'
return render_template('login.html', msg=msg)
if __name__ == '__main__':
app.run(debug=True)
登录.html
<html>
<head>
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="static/bootstrap.min.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
var test = function() {
$(function() {
$.ajax({
type: "POST",
url: "/req",
data: {'name': 'asdf'},
});
});
}
window.setInterval(function() {
test()
}, 5000);
</script>
</head>
<body>
{% if msg %}
{{ msg }} #empty page
{% endif %}
</div>
</body>
</html>
看起来你把模板渲染和Ajax混为一谈了。
您的 JavaScript test
函数确实在后端调用了您的 req
view 方法,该方法会呈现模板,但您没有对该模板执行任何操作。
您尝试在具有# empty page
注释的模板中打印的msg
变量将永远不会呈现,因为在呈现基本模板时没有未None
msg
变量。 msg
由 POST 通过 Ajax 设置,但该渲染模板永远不会显示。
如果您的目标是只查看页面上的msg
输出,请让您的req
方法在POST
上返回该输出:
@app.route('/req', methods=['GET', 'POST'])
def req():
msg = None
if request.method == 'POST':
if request.values.get('name', None) == 'asdf':
return 'got it'
return render_template('login.html', msg=msg)
在你的阿贾克斯电话中,
var test = function() {
$(function() {
$.ajax({
type: "POST",
url: "/req",
data: {'name': 'asdf'},
success: function(data) {
// do something with your 'got it' string
}
});
});
}
如果你真的想返回你在问题中写的模板,你最好提交一个表单而不是Ajax,所以你将浏览到新页面:
@app.route('/req', methods=['GET', 'POST'])
def req():
msg = None
if request.method == 'POST':
if request.values.get('name', None) == 'asdf':
render_template('login.html', msg=msg)
return render_template('login.html', msg=None)
和 HTML:
<html>
<head>
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="static/bootstrap.min.css" rel="stylesheet" media="screen">
</head>
<body>
<form action="/req" method="POST">
<input type="text" name="name">
<input type="submit" value="Submit">
</form>
{% if msg %}
{{ msg }} #empty page
{% endif %}
</div>
</body>
</html>