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

2024-05-14 00:49:14 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以为本地dev Flask实例添加更多静态路径? 我想有一个默认的static文件夹来存储站点的js/css/images文件,还有一个文件夹,例如designs来保存我的特定资产。如果存在更好的解决方案,我不想将designs文件夹放在static中。


Tags: 文件实例dev路径文件夹flask站点js
3条回答

我一直在使用以下方法:

# 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') }}

警告清空器-我不确定它是否安全;)

我想为那些想知道app.config['CUSTOM_STATIC_PATH']被设置为什么的人扩展上面接受的答案。

在我的例子中,我需要一个/.well-known目录,下面是我使用的目录:

我在我的应用程序根目录中放置了一个名为well-known的新目录 我设置了一个配置变量如下:

CUSTOM_STATIC_PATH=app.root_path + '/well-known/'

然后我使用了这个var:

@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
    return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename, conditional=True)

设置conditional=True是智能的,这将404文件不存在的任何请求。

当然,如果你想知道为什么需要为dir路径设置一个配置值,你就不需要了。你可以一直使用配置值,给你这个:

@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
    return send_from_directory(app.root_path + '/well-known/', filename, conditional=True)

我的/.well-knownURL路径文件总是来自应用程序根目录/well-known目录,因此没有必要使它更复杂。

需要注意的是,您最好通过nginx或您正在使用的任何服务器来处理这个特定的案例,设置一个额外的服务器块并从应用程序外部提供文件,我只需要将这个设置用于dev env进行测试。

你可以使用一个蓝图和它自己的静态目录 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') }}

相关问题 更多 >