Flask,blue_print,current_app

时间:2012-03-30 15:37:11

标签: python flask jinja2

我正在尝试从蓝图(我将用于模板的函数)在jinja环境中添加一个函数。

Main.py

app = Flask(__name__)
app.register_blueprint(heysyni)

MyBluePrint.py

heysyni = Blueprint('heysyni', __name__)
@heysyni.route('/heysyni'):
    return render_template('heysyni.html',heysini=res_heysini)

现在在 MyBluePrint.py 中,我想添加以下内容:

def role_function():
    return 'admin'
app.jinja_env.globals.update(role_function=role_function)

然后我就可以在我的模板中使用此功能。我无法弄清楚自

以来我如何访问该应用程序
app = current_app._get_current_object()

返回错误

working outside of request context

我如何实现这样的模式?

1 个答案:

答案 0 :(得分:9)

消息错误实际上非常清楚:

  

在请求上下文之外工作

在我的蓝图中,我试图让我的应用程序超出“请求”功能:

heysyni = Blueprint('heysyni', __name__)

app = current_app._get_current_object()
print app

@heysyni.route('/heysyni/')
def aheysyni():
    return 'hello'

我只需添加将current_app语句移动到函数中。最后它以这种方式工作:

<强> Main.py

from flask import Flask
from Ablueprint import heysyni

app = Flask(__name__)
app.register_blueprint(heysyni)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True)

<强> Ablueprint.py

from flask import Blueprint, current_app

heysyni = Blueprint('heysyni', __name__)

@heysyni.route('/heysyni/')
def aheysyni():
    #Got my app here
    app = current_app._get_current_object()
    return 'hello'