是否可以为我的本地dev Flask实例添加更多静态路径?
我希望有默认的static
文件夹,用于存储网站的js / css / images文件和另一个文件夹,例如designs
保留我的特定资产。如果存在更好的解决方案,我不想在designs
内放置static
文件夹。
答案 0 :(得分:39)
我一直在使用以下方法:
# Custom static data
@app.route('/cdn/<path:filename>')
def custom_static(filename):
return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename)
CUSTOM_STATIC_PATH
变量在我的配置中定义。
在模板中:
{{ url_for('custom_static', filename='foo') }}
警告经纪人 - 我不确定它是否安全;)
答案 1 :(得分:35)
您可以使用具有自己的静态目录的蓝图 http://flask.pocoo.org/docs/blueprints/
蓝图
blueprint = Blueprint('site', __name__, static_url_path='/static/site', static_folder='path/to/files')
app.register_blueprint(blueprint)
模板
{{ url_for('site.static', filename='filename') }}
答案 2 :(得分:2)
如果我的图像目录中存储了如下图像
images/
dir1/
image1.jpg
dir2/
image2.jpg
然后我们可以使用以下网址访问这些图像: http://localhost:5000/images/dir1/image1.jpg 在以下代码的帮助下
from flask import Flask, send_from_directory
app = Flask(__name__, static_folder='main_static_dir')
@app.route('/images/<path:filename>')
def base_static(filename):
return send_from_directory(app.root_path + '/images/', filename)
if __name__ == '__main__':
app.run(debug=True)
答案 3 :(得分:0)
对于想知道将app.config['CUSTOM_STATIC_PATH']
设置为什么的人,我想扩展上面接受的答案。
在我的情况下,我需要一个/.well-known
目录,这就是我所使用的:
我在应用程序根目录中放置了一个新目录,名为well-known
。
我像这样设置配置变量:
CUSTOM_STATIC_PATH=app.root_path + '/well-known/'
然后我像这样使用该变量:
@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename, conditional=True)
设置conditional=True
很聪明,这将对文件不存在的所有请求进行404处理。
当然,如果您想知道为什么需要为目录路径设置配置值,则不需要。您总是可以只使用配置的值,而改为使用:
@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
return send_from_directory(app.root_path + '/well-known/', filename, conditional=True)
我用于/.well-known
URL路径的文件总是来自应用程序根/well-known
目录,因此使其变得更复杂没有任何意义。
请注意,您最好通过设置额外的服务器块并从应用程序外部提供文件来处理来自nginx或您正在使用的任何服务器的特殊情况,我只需要为开发环境设置此设置进行测试。