无需更改链接到静态文件的方式,仍然可以使用url_for('static', filename='myfile.txt')
。将默认静态视图替换为重定向到CDN(如果已配置)的视图。
from urllib.parse import urljoin
# or for python 2: from urlparse import urljoin
from flask import redirect
@app.endpoint('static')
def static(filename):
static_url = app.config.get('STATIC_URL')
if static_url:
return redirect(urljoin(static_url, filename))
return app.send_static_file(filename)
无论您是在开发机器上还是在生产机器上,都将STATIC_URL
config值设置为CDN,并且对静态文件的请求将在此处重定向。
重定向相对便宜,并且被浏览器记住。如果您发现性能受到它们的显着影响,则可以编写一个在使用CDN时直接链接的函数。
@app.template_global()
def static_url(filename):
static_url = app.config.get('STATIC_URL')
if static_url:
return urljoin(static_url, filename)
return url_for('static', filename=filename)
该template_global
装饰使得所有可用模板的功能。代替url_for
需要静态文件的URL时使用它。
可能已经有一个Flask扩展程序可以为您执行此操作。例如,Flask-S3提供了一个服务url_for
,用于提供来自AWS S3的静态文件。