2013-02-09 16 views
6

Sono un po 'nuovo per Jinja2 e mi chiedo se c'è un modo per rendere i template, mentre vengono generati, per stampare sulla console o reindirizzare un output in qualche tipo di stream?jinja2 print to console o logging

Poiché i modelli Jinja2 possono avere una logica interna, penso che sarebbe utile qualche volta registrare alcune informazioni in qualche tipo di file di registro, o almeno essere stampato nella console.

È possibile o sto solo parlando di spazzatura?

risposta

7

Penso che si possa ottenere utilizzando i filtri (http://jinja.pocoo.org/docs/api/#custom-filters) o le estensioni (http://jinja.pocoo.org/docs/extensions/#adding-extensions). L'idea è di stampare il filtro o l'estensione direttamente sulla console.

Non testato, ma il filtro dovrebbe essere qualcosa di simile:

def debug(text): 
    print text 
    return '' 

environment.filters['debug']=debug 

per essere usato come:

...<p>Hello world!</p> {{"debug text!"|debug}}... 

Ricordare di rimuovere il debug sul codice di produzione!

+0

oh cool! Sapevo che ci doveva essere un modo per raggiungerlo. Ora, ho un problema con questo. Non riesco a inviare stringhe letterali al filtro personalizzato, posso ottenerlo con un {% set text = "debug text!" %} tag, quindi {{text | debug}}. Non so se le stringhe letterali possono essere inviate ai filtri o no ...: -o –

+0

beh, parzialmente risolto (o forse è così che dovrebbe essere) usando '()' per racchiudere tutta la stringa di cui ho bisogno stampare. Ad esempio {{("debug text!") | debug}}. O più precisamente: {{("debug text! Value:" ~ valueINeedToLog) | debug}} –

2

Un simile ma leggermente diverso approccio con processore contesto:

in Python/boccetta:

@app.context_processor 
def utility_functions(): 
    def print_in_console(message): 
     print str(message) 

    return dict(mdebug=print_in_console) 

In Jinja2, utilizzare ovunque come segue:

{{ mdebug("any text or variable") }}