2014-04-20 5 views
11

Nel mio init di file .py ho:Spogliatura degli spazi bianchi in jinja2 e flask ... perché ho ancora bisogno del segno meno?

app.jinja_env.trim_blocks = True 
app.jinja_env.lstrip_blocks = True 

mi aspetto nel mio modello Jinja2 che gli spazi bianchi saranno tagliati, in modo che:

<div> 
{% if x == 3 %} 
<small>{{ x }}</small> 
{% endif %} 
</div> 

renderà come:

<div> 
<small>3</small> 
</div> 

Invece, ottengo spazi supplementari:

<div> 

<small>3</small> 

</div> 

Perché trim_blocks e lstrip_blocks non tagliano lo spazio bianco?

+1

non ero in grado di riprodurlo (Jinja 2.7. 3). La visualizzazione della sorgente di rendering in Firefox e Chrome per me mostra il rendering del modello correttamente senza le nuove righe aggiuntive. Ci sono diverse possibili cause qui. Potrebbe trattarsi di un problema jinja2, ma potrebbe anche essere un problema di editor o di linux-windows se stai sviluppando in una piattaforma e visualizzandone un'altra (ad esempio http://superuser.com/questions/374028/how-are-n -and-r-handled-differently-on-linux-and-windows) – tohster

+0

I secondo commento di @ tohster. Stai posizionando le dichiarazioni di assegnazione nel posto sbagliato? Puoi pubblicare la fonte completa? –

risposta

5

Sembra che le impostazioni dell'ambiente non siano impostate prima del jinja2 carica il modello.

classe jinja2.Environment ([opzioni])

... istanze di questa classe può essere modificato se non sono condivise e se nessun modello è stato caricato finora. Le modifiche agli ambienti dopo il caricamento del primo modello determinano effetti sorprendenti e comportamenti non definiti.

http://jinja.pocoo.org/docs/dev/api/#jinja2.Environment

controllare l'ordine/struttura del codice per vedere come le impostazioni vs modelli di ambiente vengono caricati.

Per inciso, whitespace control funziona come previsto, senza la complessità di ambienti e di carico di Jinja2: Jinja2

import jinja2 

template_string = '''<div> 
{% if x == 3 %} 
<small>{{ x }}</small> 
{% endif %} 
</div> 
''' 
# create templates 
template1 = jinja2.Template(template_string) 
template2 = jinja2.Template(template_string, trim_blocks=True) 

# render with and without settings 
print template1.render(x=3) 
print '\n<!-- {} -->\n'.format('-' * 32) 
print template2.render(x=3) 

<div> 

<small>3</small> 

</div> 

<!-- -------------------------------- --> 

<div> 
<small>3</small> 
</div> 

non ho usato, ma dopo la scansione dei documenti, al fine di carico sembra essere sospetto

-1

si deve sfuggire alla {% se%} e {% endif%} dichiarazioni con un segno meno, al fine di sopprimere le righe vuote:

<div> 
{%- if x == 3 %} 
<small>{{ x }}</small> 
{%- endif %} 
</div> 
+0

in base a http://jinja.pocoo.org/docs/dev/templates/#whitespace-control se si configura Jinja2 in trim_blocks e lstrip_blocks, è necessario sopprimere le nuove righe per impostazione predefinita. Quindi non stai rispondendo alla domanda dell'OP (cerca di impostare quelle opzioni ma non funziona ancora) – cowbert

Problemi correlati