Sie*_*cje 9 python jinja2 flask python-2.7
我希望能够访问一个网页,它将运行一个python函数并在网页中显示进度.
因此,当您访问该网页时,您可以看到脚本的输出,就像您从命令行运行它并在命令行中查看输出一样.
我需要在函数中做什么?
我需要在模板中做什么?
编辑:
我正在尝试使用Markus Unterwaditzer的代码和模板.
{% extends "base.html" %}
{% block content %}
{% autoescape false %}
{{word}}
{% endautoescape %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
Python代码
import flask
from flask import render_template
import subprocess
import time
app = flask.Flask(__name__)
@app.route('/yield')
def index():
def inner():
for x in range(1000):
yield '%s<br/>\n' % x
time.sleep(1)
return render_template('simple.html', word=inner())
#return flask.Response(inner(), mimetype='text/html') # text/html is required for most browsers to show the partial page immediately
app.run(debug=True, port=8080)
Run Code Online (Sandbox Code Playgroud)
它运行但我在浏览器中看不到任何内容.
Mar*_*zer 14
这是一个非常简单的应用程序,使用普通HTTP流式处理进程的输出:
import flask
import time
app = flask.Flask(__name__)
@app.route('/yield')
def index():
def inner():
for x in range(100):
time.sleep(1)
yield '%s<br/>\n' % x
return flask.Response(inner(), mimetype='text/html') # text/html is required for most browsers to show the partial page immediately
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我今天遇到了同样的问题,并找到了一种方法来调整Markus Unterwaditzer对模板工作的回答.
关键是使用jinja Template.generate()而不是Template.render(),烧瓶使用render_template().
import flask
import time
from jinja2 import Environment
from jinja2.loaders import FileSystemLoader
app = flask.Flask(__name__)
@app.route('/yield')
def index():
def inner():
for x in range(100):
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)
Run Code Online (Sandbox Code Playgroud)
假设有一个result.html看起来像这样的模板:
{% extends "layout.html" %}
{% block body %}
<body>
{% for line in result %}
{{ line }}
{% endfor %}
</body>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)