2012-03-30 9 views
7

Ich versuche eine Funktion in der Jinja-Umgebung von einem blauen Druck (eine Funktion, die ich in einer Vorlage verwenden werde) hinzuzufügen.Flask, blue_print, current_app

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) 

Jetzt in MyBluePrint.py, würde Ich mag so etwas wie hinzufügen:

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

Ich kann dann diese Funktion in meiner Vorlage verwenden. Ich kann nicht herausfinden, wie ich auf die Anwendung zugreifen kann, da

app = current_app._get_current_object() 

Rückkehr der Fehler

working outside of request context 

Wie kann ich ein solches Muster implementieren?

Antwort

9

Die Meldung Fehler war eigentlich ziemlich klar:

außerhalb des Anforderungskontext Arbeits

In meinem Plan, ich habe versucht, meine Anwendung außerhalb der ‚Antrag‘ Funktion zu erhalten:

heysyni = Blueprint('heysyni', __name__) 

app = current_app._get_current_object() 
print app 

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

Ich einfach hinzufügen, um die Current_app-Anweisung in die Funktion zu verschieben. Schließlich funktioniert es so:

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'