2015-05-21 11 views
7

Ho un'applicazione Flask che chiama flask.render_template senza problemi quando viene richiamata da una beuta http request.rendering template jinja2 senza un contesto Flask

ho bisogno lo stesso metodo di lavorare fuori di pallone (da un back pitone programma end)

resolved_template = render_template(template_relative_path, **kwargs) 

ho potuto utilizzare la jinja2 api, ma desidero lo stesso metodo per lavorare, in entrambi i contesti (pallone e riga di comando)

risposta

7

È necessario renderlo in un contesto di app. Importa la tua app nel tuo codice backend e fai quanto segue.

with app.app_context(): 
    data = render_template(path, **context) 
+0

voglio solo aggiungere un piccolo avvertimento con questo metodo : quando si esegue in Flask, questo metodo causa db.session.rollbak(). Quindi, se hai una transazione in corso, vorrai evitare di creare un nuovo contesto. –

7

Se si desidera completamente bypassare flask e utilizzare esclusivamente Jinja per il rendering il modello, si può fare in quanto tale

import jinja2 

def render_jinja_html(template_loc,file_name,**context): 

    return jinja2.Environment(
     loader=jinja2.FileSystemLoader(template_loc+'/') 
    ).get_template(file_name).render(context) 

E poi si può chiamare questa funzione per rendere il vostro html

+1

Ancora meglio, basta usare l'ambiente jinja predefinito di Flask con 'app.jinja_env'. – 0x24a537r9

0

Quello che uso è questo codice:

import jinja2 
template_values = { 
    'value_name_in_html': value_name_in_python, 
} 

template = JINJA_ENVIRONMENT.get_template("file_patch") 
self.response.write(template.render(template_values))