我无法相信这可能会如此艰难。我试图找到一个解决方案,但仍无法访问我的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/'))
这似乎是不正确的方法。但它的确有效。如果我在另一个文件上尝试相同,在同一个文件夹中,它不起作用。
我正在撕裂我的头发...任何帮助表示赞赏! 感谢。
答案 0 :(得分:0)
我明白了。这很简单。
您无法在文件的根目录上调用current_app.config['KEY_VALUE']
。它应始终位于def
或类定义中,然后在def
内实例化。