2015-10-02 9 views
5

Unter Flask möchte ich Sachen in die Jinja-Vorlage ein- und ausschließen, je nachdem, ob wir uns im Debug-Modus befinden oder nicht. Ich diskutiere nicht, ob das eine gute oder schlechte Idee ist (ich würde "schlecht" wählen, aber ich will es nur für diesen Fall tun :-), also wie könnte das am besten passieren?Wie erkennen Sie den Debug-Modus in Jinja?

Ich habe gehofft, ich würde nicht die Variable explizit in die Vorlage übergeben muß, anders als dies:

render_template('foo.html', debug=app.debug) 

nicht, dass dies zu hart sein würde, aber ich würde lieber nur auf magische Weise in der Vorlage sagen:

Gibt es eine Standardvariable, die nur darauf wartet, dass ich mich stürze?

+0

Haben Sie Einstellung als 'g.debug' basierend auf einem anderen Debug-Schaltmechanismus (andere Konfigurationsvariablen/files, einschließlich 'config', siehe http://flask.pooco.org/docs/0.10/templating/#standard-context) und soll die Vorlage das verwenden? – metatoaster

+0

@metatoaster nette Idee, aber nach einigem herumspielen, nup, keine Freude. –

Antwort

8

Verwendung context processors

Um neue Variablen automatisch in den Kontext einer Vorlage zu injizieren, existieren Kontext Prozessoren in Flask. Kontextprozessoren werden vor dem Rendern der Vorlage ausgeführt und können neue Werte in den Vorlagenkontext eingeben. Ein Kontextprozessor ist eine Funktion, die ein Wörterbuch zurückgibt. Die Schlüssel und Werte dieses Wörterbuchs werden dann mit dem Template-Kontext zusammengefasst, für alle Vorlagen in der App:

@app.context_processor 
def inject_debug(): 
    return dict(debug=app.debug) 

jetzt debug Variable zugänglich in Vorlagen.

1

Wenn Sie Ihr Kolben-Anwendung mit app.run(debug=True) ausführen, können Sie auch prüfen, nur die config Objekt wie folgt:

{% if config['DEBUG'] %} 
    <h1>My html here</h1> 
{% endif %}