Flask - 如何在使用生成器的Response(stream_template)时使用CSS

4 投票
1 回答
1269 浏览
提问于 2025-04-18 00:32

我正在学习Flask,并且在做一个小应用。最开始,我测试的时候没有使用css文件,代码是这样的:(delay()函数从生成器获取结果)

return Response(stream_template('login.html', data=delay()))

这个方法对我来说运行得很好。现在我想添加一个新的css文件,叫做style.css,我把它放在了静态文件夹里。在我的html文件中,我写了:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"/>

这段代码可能不会正常工作,因为上下文和响应有问题,但作为静态返回是可以正常工作的:

return render_template('login.html')

我的问题是,有没有办法让生成器(delay()函数)和静态文件夹里的CSS同时工作?我花了几个小时在这个问题上,但还没有找到答案。

我的stream_template是:

def stream_template(template_name, **context):
    app.update_template_context(context)
    t = app.jinja_env.get_template(template_name)
    rv = t.stream(context)
    # uncomment if you don't need immediate reaction
    ##rv.enable_buffering(5)
    return rv

非常感谢

1 个回答

3

引用自文档

注意,当你在传输数据时,函数执行的那一刻,请求的上下文就已经消失了。Flask 0.9 提供了一个助手,可以在生成器执行期间保持请求的上下文:...

在你的情况下,你的代码可能应该是:

return Response(stream_with_context(stream_template('login.html', data=delay())))

或者

return Response(stream_template('login.html', data=stream_with_context(delay())))

撰写回答