我是新手。我有代码将输出流式传输到浏览器。对于我的下面的代码,我需要从浏览器输入范围值并显示计数直到范围。提前谢谢。
import flask
import time
from jinja2 import Environment
from jinja2.loaders import FileSystemLoader
app = flask.Flask(__name__)
@app.route('/')
def index():
def inner():
for x in range(100):# eg: 100 should input value from browser
time.sleep(1)
yield '%s<br/>\n' % x
env = Environment(loader=FileSystemLoader('templates'))
tmpl = env.get_template('result.html')
return flask.Response(tmpl.generate(result=inner()))
app.run(debug=True)
result.html
<html>
{% block body %}
<body>
{% for line in result %}
{{ line }}
{% endfor %}
</body>
{% endblock %}
</html>
答案 0 :(得分:1)
以下是您要做的事情的答案。
我已将您的应用代码修改为:
import flask
import time
from flask import request
from jinja2 import Environment
from jinja2.loaders import FileSystemLoader
app = flask.Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
result = None
if request.method == 'POST':
counter = int(request.form.get('counter', 0))
def inner():
for x in range(counter):# eg: 100 should input value from browser
time.sleep(1)
yield '%s<br/>\n' % x
result = inner
env = Environment(loader=FileSystemLoader('templates'))
tmpl = env.get_template('result.html')
return flask.Response(tmpl.generate(result=result if result is None else result()))
app.run(debug=True)
这里我修改了索引视图以处理GET
和POST
方法。如果有简单的GET
请求,则返回带有result=None
的模板,如果方法为POST
则返回returns=result()
(我在POST块中指定了result = inner)。处理None或值的逻辑在模板中处理。
您的模板需要更改为:
<html>
{% block body %}
<body>
{% if result%}
{% for line in result %}
{{ line }}
{% endfor %}
{% else %}
<form method="post">
<input type="text" placeholder="Enter a number" name="counter">
<input type="submit" value="Submit">
</form>
{% endif %}
</body>
{% endblock %}
</html>
我添加了if-else条件,因为您使用相同的模板,甚至URL也不会更改。
您可以关注Flask Quickstart Tutorial了解详情