首页 > 解决方案 > app.shell_context_processor 装饰器不会将该函数注册为 shell 上下文函数

问题描述

我在文件夹中的microblog.py文件中创建了以下函数。~/Programing/Rasa/myflaskapp/app它创建一个 shell 上下文,将数据库实例和模型添加到 shell 会话:

from app import app, db
from app.models import User, Post

@app.shell_context_processor
def make_shell_context():
    return {'db': db, 'User': User, 'Post': Post}

解码器将该app.shell_context_processor函数注册为外壳上下文函数。但是当执行flask shell命令时,~/Programing/Rasa/myflaskapp/它并没有调用这个函数,而是按预期将它返回的元素记录在shell会话中。

所以我明白了:

(MyFlaskAppEnv) mike@mike-thinks:~/Programing/Rasa/myflaskapp$ flask shell
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
App: app [production]
Instance: /home/mike/Programing/Rasa/myflaskapp/instance
>>> db
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'db' is not defined

而不是 :

(venv) $ flask shell
>>> db
<SQLAlchemy engine=sqlite:////Users/migu7781/Documents/dev/flask/microblog2/app.db>

更新:我试图检查功能是否保存完好

但似乎不是:

>>> print(app.shell_context_processors[0]())
Traceback (most recent call last):
  File "<console>", line 1, in <module>
IndexError: list index out of range

microblog.py只改变了导入appdb

from app import app, db

@app.shell_context_processor
def make_shell_context():
    return {'db': db}

我试图将microblog.py它放在app文件夹中甚至删除它,它总是相同的错误:我无法将函数注册为 shell 上下文函数。同时,当我>>> app在 Flask 上下文中调用时,我确实有一个答案。

标签: shellflask

解决方案


我通过设置 FLASK_APP 环境变量告诉 Flask 如何导入应用程序:

export FLASK_APP=microblog.py

它似乎成功了!


推荐阅读