Python 如何在烧瓶中生成一个模板而不是另一个模板?

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

我一直在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_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 %}