2014-04-20 10 views
11

W moim startowych .py pliku mam:Usuwanie białych znaków w jinja2 i kolbie ... dlaczego nadal potrzebuję znaku minus?

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

się spodziewać w swoim szablonie jinja2 że będą spacje być przycięte, tak że:

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

uczyni jako:

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

Zamiast tego otrzymuję dodatkowe spacje:

<div> 

<small>3</small> 

</div> 

Dlaczego trim_blocks i lstrip_blocks nie przycinają białych znaków?

+1

I nie był w stanie go odtworzyć (Jinja 2.7. 3). Przeglądanie renderowanego źródła w Firefoksie i Chrome dla mnie pokazuje prawidłowe renderowanie szablonu bez dodatkowych znaków nowej linii. Jest kilka możliwych przyczyn. Może to być problem z jinja2, ale może to być również edytor lub problem z linux-windows, jeśli projektujesz na jednej platformie i wyświetlasz w innej (na przykład http://superuser.com/questions/374028/how-are-n i-r-handled-differently-on-linux-and-windows) – tohster

+0

I sekunda @ komentarz tohster'a. Czy umieszczasz oświadczenia przydziału w niewłaściwym miejscu? Czy możesz opublikować pełne źródło? –

Odpowiedz

5

Wygląda na to, że ustawienia środowiska nie są ustawione przed jinja2 wczytuje szablon.

klasa jinja2.Environment ([opcje])

... Wystąpienia tej klasy mogą być modyfikowane, jeśli nie zostaną one udostępnione i jeśli szablon nie został załadowany do tej pory. Modyfikacje środowisk po wczytaniu pierwszego szablonu spowodują zaskakujące efekty i niezdefiniowane zachowanie.

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

sprawdzić kolejność/strukturę kodu, aby zobaczyć, w jaki sposób ustawienia środowiskowe vs szablony są ładowane.

Jako bok, jinja2 za whitespace control działa zgodnie z oczekiwaniami bez złożoności środowisk i załadunku:

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> 

ja nie używałem jinja2, ale po zeskanowaniu Dokumentów, aby załadunku wydaje się podejrzany.

-1

Musisz uciec {% if%} i {% endif%} sprawozdania ze znakiem minus w celu stłumienia puste wiersze:

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

, zgodnie z http://jinja.pocoo.org/docs/dev/templates/#whitespace-control, jeśli skonfigurujesz Jinja2 na trim_blocks i lstrip_blocks, domyślnie powinna ona tłumić nowe linie. Więc nie odpowiadasz na pytanie OP (próbuje ustawić te opcje, ale nadal nie działa) – cowbert

Powiązane problemy