本地Flask实例中有多个静态路径

时间:2012-03-01 08:43:31

标签: python html flask

是否可以为我的本地dev Flask实例添加更多静态路径? 我希望有默认的static文件夹,用于存储网站的js / css / images文件和另一个文件夹,例如designs保留我的特定资产。如果存在更好的解决方案,我不想在designs内放置static文件夹。

4 个答案:

答案 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或您正在使用的任何服务器的特殊情况,我只需要为开发环境设置此设置进行测试。