问题出在我收到请求并将值分配给变量msg
后,我的模板login.html
仍然为空,我希望看到消息=&#39;得到它&#39;。< / p>
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)
的login.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>
答案 0 :(得分:2)
看起来你正在混淆模板渲染和Ajax。
您的JavaScript test
函数 在后端调用您的req
视图方法, 渲染模板,但您'我没有对该模板做任何事情。
您尝试在模板中打印的msg
个# empty page
变量将永远不会被渲染,因为没有msg
变量不是None
变量1}}在渲染基础模板时。 msg
由POSTing通过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)
在你的Ajax调用中,
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>