Flask - 如何在使用生成器的Response(stream_template)时使用CSS
我正在学习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())))