Flask根路径 - app.root_path,current_app.root_path和其他路径不起作用

时间:2018-03-25 23:20:54

标签: python flask

我无法相信这可能会如此艰难。我试图找到一个解决方案,但仍无法访问我的Flask应用程序的root_path。更糟糕的是,在一个文件中它起作用,在另一个文件中它不起作用。这是我试过的:

from flask import current_app

file_path = os.path.join(os.path.abspath(current_app.root_path, 'dir/for/my/files/'))
#  ERROR: RuntimeError: Working outside of application context.

#  I added ROOT_PATH to my settings.py file
file_path = os.path.join(os.path.abspath(app.config['ROOT_PATH'], 'dir/for/my/files/'))
#  ERROR: RuntimeError: Working outside of application context.

file_path = os.path.join(os.path.abspath(current_app.instance_path, 'dir/for/my/files/'))
#  ERROR: RuntimeError: Working outside of application context.

上面的文件位于我的controllers文件夹中。我正在使用基于Flask-Foundation的应用程序工厂模式。

我读了docs about the application context而我却得不到它。我试过了:

import app
with app.app_context():
   ...
# ERROR: AttributeError: module 'app' has no attribute 'app_context'

在我得到它的文件中,我有:

import app_name
@bp.route('/')
def index():
    file_path = os.path.join(app_name.app.root_path(current_app.root_path, 'dir/for/my/files/'))

这似乎是正确的方法。但它的确有效。如果我在另一个文件上尝试相同,在同一个文件夹中,它不起作用。

我正在撕裂我的头发...任何帮助表示赞赏! 感谢。

1 个答案:

答案 0 :(得分:0)

我明白了。这很简单。

您无法在文件的根目录上调用current_app.config['KEY_VALUE']。它应始终位于def或类定义中,然后在def内实例化。