2015-10-02 6 views
5

Sotto il matraccio, voglio includere/escludere elementi nel modello jinja in base al fatto che, o meno, siamo in modalità di debug. Non sto discutendo se questa è un'idea buona o cattiva (voterei 'male', ma voglio farlo comunque per questo caso :-), quindi come potrebbe accadere questo?Come rilevare la modalità di debug in jinja?

Speravo di non dover passare la variabile esplicitamente nel modello, a differenza di questo:

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

non che questo sarebbe troppo difficile, ma preferirei appena magicamente dire che nel modello:

{% if debug %} 
     go crazzzzy 
{% endif %} 

C'è qualche variabile di default che mi sta semplicemente aspettando di scattare?

+0

Avete preso in considerazione l'impostazione 'g.debug' sulla base di qualche altro meccanismo di commutazione di debug (le altre variabili di configurazione/file, incluso 'config', vedi http://flask.pocoo.org/docs/0.10/templating/#standard-context) e il modello lo usa? – metatoaster

+0

@metatoaster bella idea ma, dopo un po 'giocherellando, nup, nessuna gioia. –

risposta

8

uso context processors

Per iniettare nuove variabili automaticamente nel contesto di un modello, processori di contesto esistono in Flask. I processori di contesto vengono eseguiti prima del rendering del modello e hanno la capacità di iniettare nuovi valori nel contesto del modello. Un processore di contesto è una funzione che restituisce un dizionario. Le chiavi ei valori di questo dizionario sono poi fuse con il contesto modello, per tutti i modelli in App:

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

ora debug variabile accessibili nei template.

1

Quando si esegue l'applicazione pallone con app.run(debug=True), si può anche solo controllare l'oggetto config in questo modo:

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