如何根据条件从app.response_class()函数内部在Flask中渲染模板?

时间:2019-04-11 14:47:23

标签: flask response

我正在创建一个Flask应用,其中使用app.response_class函数将视频连续流式传输到网页。我的应用包含三个页面,其中两个与此处相关:index.html(这是启动某种游戏的登录页面)和game.html(通过open-方式显示所玩游戏的实况视频), cv2)。我想要的是呈现index.html的模板,通常使用

呈现
@app.route('/')
def index():
    return render_template('index.html')
满足特定条件时,从response_class函数中输入

。条件是得分[0] == 10或得分[1] == 10,因为这表示游戏已结束。

以下(精简的)代码可处理视频的实时流传输以及分数的更新(此处出于测试目的而对其进行随机更新):

def video_stream():
    global score
    game_running = True

    while game_running:
        global game
        ok, frame = video_camera.read()

        # Mock scoring update
        score_black, score_white = np.random.choice([0, 1], 1, p=[0.95, 
        0.05]), np.random.choice([0, 1], 1, p=[0.95, 0.05])
        score[0] += score_black[0]
        score[1] += score_white[0]

        # Stop condition
        if score[0] == 5 or score[1] == 5:

            # Stop game and yield last frame
            game.stop()
            game_running = False
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + global_frame + b'\r\n\r\n')

            score = None

            # RENDER TEMPLATE FOR INDEX.HTML HERE AND BREAK OUT OF APP_RESPONSE (HOW??)

        if ok:
             _, jpeg = cv2.imencode('.jpg', frame)
            global_frame = jpeg.tobytes()
            jpeg = jpeg.tobytes()
            yield (b'--frame\r\n'
                    b'Content-Type: image/jpeg\r\n\r\n' + jpeg + b'\r\n\r\n')

@app.route('/video_viewer')
    def video_viewer():
    return app.response_class(video_stream(),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

我尝试产生render_template并返回它。但是,当然,此返回值将传递回response_class,从而导致错误?我不知道如何突破response_class函数来呈现此模板。有人有线索吗?

0 个答案:

没有答案