Python 如何在烧瓶中生成一个模板而不是另一个模板?
我一直在flask中从事一个项目,我被困在一个部分,我需要找出如何生成一个flask模板而不是另一个 举例来说,为了说明我的意思,我有一个这样的程序Python 如何在烧瓶中生成一个模板而不是另一个模板?,python,python-3.x,flask,Python,Python 3.x,Flask,我一直在flask中从事一个项目,我被困在一个部分,我需要找出如何生成一个flask模板而不是另一个 举例来说,为了说明我的意思,我有一个这样的程序 from flask import Flask, stream_with_context, Response, render_template app = Flask('app') def page_generator(): yield render_template('index.html') yield render_temp
from flask import Flask, stream_with_context, Response, render_template
app = Flask('app')
def page_generator():
yield render_template('index.html')
yield render_template('index2.html')
generator_obj = None
@app.route('/')
def hello_world():
global generator_obj
generator_obj = generator_obj or page_generator()
return Response(stream_with_context(next(generator_obj)))
app.run(host='0.0.0.0', port=8080)
main.py
from flask import Flask, stream_with_context, Response, render_template
app = Flask('app')
@app.route('/')
def hello_world():
def generate():
yield render_template('index.html')
yield render_template('index2.html')
return Response(stream_with_context(generate()))
app.run(host='0.0.0.0', port=8080)
index.html
<h3>Hi</h3>
尽管这是有道理的,但我的目标是让它只产生
Bye
,它应该取代Hi
。我尝试了其他途径,如返回两个,但没有一个工作。有什么办法吗?要使用这样的发电机,你必须做不同的功能
from flask import Flask, stream_with_context, Response, render_template
app = Flask('app')
def page_generator():
yield render_template('index.html')
yield render_template('index2.html')
generator_obj = None
@app.route('/')
def hello_world():
global generator_obj
generator_obj = generator_obj or page_generator()
return Response(stream_with_context(next(generator_obj)))
app.run(host='0.0.0.0', port=8080)
我不确定这在烧瓶里是否有效。
请注意,在您两次调用
hello\u world
后,除非您在StopIteration
上将generator\u obj
重置为None
,否则此操作将失败,但如果您希望使用静态内容流式传输模板,这里有一种方法。我将使用sleep()
方法暂停执行1秒
from flask import Flask, stream_with_context, request, Response, flash
import time
from time import sleep
app = Flask(__name__)
def stream_template(template_name, **context):
app.update_template_context(context)
t = app.jinja_env.get_template(template_name)
rv = t.stream(context)
rv.disable_buffering()
return rv
data = ['Hi', 'Bye']
def generate():
for item in data:
yield str(item)
sleep(1)
@app.route('/')
def stream_view():
rows = generate()
return Response(stream_with_context(stream_template('index.html', rows=rows)))
if __name__ == "__main__":
app.run()
其中模板/index.html:
{% for item in rows %}
<h1>{{ item }}</h1>
{% endfor %}
{%行中的项目%}
{{item}}
{%endfor%}
请参阅文档。我认为您不了解发电机的工作原理。。。它需要通过迭代或通过
next
@Error syntacticalreforme来调用。我也这么认为,在这种情况下,生成器的使用是不正确的,但是当我返回两个没有生成器的文件时,只有第一个文件的内容可见。如果您不介意的话,您能告诉我在这个特定场景中使用迭代或next
函数的意思吗?它的工作原理与Hi
中显示的一样,然后我必须重新加载才能显示再见
。有没有关于如何在不重新加载的情况下执行此操作的线索?发电机就是这样工作的。。。它需要调用该方法两次。。。如果你想在一段时间后加载第二个页面,你应该用谷歌搜索这些内容。好的,谢谢你的帮助。我会接受这个答案,因为它确实帮助我解决了加载第二个模板的问题。这可能会帮助你或这个完美的,正是我所寻找的。感谢一个洛蒂想添加一个类似的东西,但视频流链接。
{% for item in rows %}
<h1>{{ item }}</h1>
{% endfor %}