2013-01-07 4 views
5

Ho una semplice app per flaconi e voglio usare @app.before_request, ma in qualche modo non funziona! Sono sicuro che non sto pensando correttamente a questo! a quanto pare saranno chiamati con qualcosa di simile:come chiamare @app.before_request

return redirect(url_for('index')) 

ma ho bisogno di essere chiamato per:

return render_template('index.html') 

Qualcuno può aiutarmi?

risposta

6

Se vuoi dare un po 'di codice forse sarà meglio capire la tua domanda, ma se ho capito bene vuoi renderizzare il modello giusto prima della richiesta?

before_request viene utilizzato per chiamare alcune funzioni o eseguire un'azione prima della richiesta. Quindi, in sostanza, è per preparare la tua app a gestire la richiesta che viene. Esempio: inizializzare la connessione al database e inserirla nell'oggetto g per un accesso successivo.

Esempio di utilizzo before_request (come inizializzare DB per esempio) è:

@app.before_request 
def before_request(): 
    g.db = connect_db() 

Se lo si utilizza come @app.before_request così è decoratore. Qualcosa di più potrebbe essere trovato in Flask docs

Ma un'altra cosa è perché vuoi render_template giusto prima della richiesta? Penso che dovresti rendere i template nelle viste non in questo posto. Hai lasciato che la richiesta raggiungesse la tua app, la tua vista e quindi il modello di rendering lì.

+0

Ciao Ignas, in realtà voglio rendere il modello dopo la richiesta! Volevo il 'return render_template()' per triger il '@ app.before_request' come il' return redirect() 'fa! Mi aggiro per ora (usando il reindirizzamento) ma continuo a chiedermi se è ancora fattibile! – Amin