System szablonów Pytigona bazuje na szablonach django:
https://docs.djangoproject.com/en/2.2/ref/templates/language/
Szablon Pytigon'a to zapisany w innym formacie szablon django. Przy pomocy specjalnego preprocesora szablony Pytigon'a (standardowe rozszerzenia .ihtml) kompilowane są do szablonów .html, zgodnych w 100% ze składnią django.
Zamiarem autora było poprawić czytelość szablonów django nie rezygnując ze 100% kompatybilności z nimi. Najbardziej znaczącą zmianą w stosunku do Django było wprowadzenie wcięć. Zasady są następujące:
blok:
<h1>Hello world!</h1>
konwertowany jest do:
<h1>Hello world!</h1>
blok:
.abc
konwertowany jest do:
abc
blok
h1
konwertowany jest do:
<h1></h1>
blok:
h1
div
p
konwertowany jest do:
<h1></h1>
<div><p></p></div>
blok:
p class=test
konwertowany jest do:
<p class="test"></p>
blok:
p class=test,,,style=padding:10...Hello world!
konwertowany jest do:
<p class="hello" style="padding:10">Hello world!</p>
blok:
konwertowany jest do:
{% block test %}
<p>Hello!</p>
{% endblock %}
blok:
konwertowany jest do:
{% for row in table %}
<li>{!{row}!}</li>
{% endfor %}"
blok:
style type=text/css===>
.table th {
background-color: #CEE;
}
body {
margin: 5px;
font-size: 12px;
}
body
konwertowany jest do:
<style type="text/css">
.table th {
background-color: #cee;
}
body {
margin: 5px;
font-size: 12px;
}
</style>
<body></body>
blok:
style type=text/css>>>
.table th {
background-color: #CEE;
}
body {
margin: 5px;
font-size: 12px;
}|| |
body
konwertowany jest do:
<style type="text/css">
.table th {
background-color: #cee;
}
body {
margin: 5px;
font-size: 12px;
}
</style>
<body></body>
"""
Najczęściej system szablonów wykorzystywany jest do generowania dokumentów typu html. Pytigon wprowadził mechanizmy, pozwalające na generowanie dokumentów innych typów:
Szablon pdf wykorzystuje dokładnie taką samą składnię jak szablony html. Dodatkowo obsługiwane są specjalne tagi: page, header, footer, calc
```html
page
header height=50
table width=100%
tr
td width=25%
.AK/101
td width=50%
.Example title
td width=25%
.2022-01-01
footer height=30
p width=100%,,,align=center...page <calc>body.page</calc>
Szablonami są pliki w formatach xlsx lub ods. Tworzysz je dokładnie tak jak inne dokumenty tego typu. Dodatkowo możesz umieszczeć elementy generowane dynamicznie. W każdej komórce możesz wstawić zmienne wpisując {{var}}. Specyfika arkuszy powoduje, że umieszczenie niektórych konstrukcji szablonów w dokumencie jest trudne lub niemożliwe. Aby zlikwidować część ograniczeń system szablonów został rozszerzony o kilka dodatkowych konstrukcji:
jeżeli wpis w komórce arkusza rozpoczyna się od znaków ":0" - zawartość komórki konwertowana jest do liczby np ":0{{item.amount}}"
jeżeli wpis w komórce rozpoczyna się od ":" - zawartość komórki konwertowana jest do napisu: np ":}
jeżeli wpis w komórce rozpoczyna się od ":?" - zawartość komórki konwertowana jest do wartości w zależności od wyniku. np: ":?{{item.value}}
jeżeli wpis w komórce rozpoczyna się od ":=" - zawartość komórki konwertowana jest do formuły np: ":={{item.count}}+1
jeżeli wyrażenie szablonu znajduje się w komentarzu, możesz użyć następującej składni:
!{% instruction %}@{ endinstruction %}
perwsza konstrukcja powoduje, że fragment {% instruction %} będzie umieszczony przed bieżącą komurką a {% endinstruction %} zostanie wstawiony bezpośrednio za komórką. Elemntem rozdzielającym przedrostka od przyrostka jest znak '@' druga konstrukcja jest podobna do pierwszej z tym, że przedrostek wstawiany jest przed bieżący wiersz a przyrostek za ostatnią komórką bieżącego wiersza trzecia konstrukcja działa analogicznie do 2 wcześniejszych, z tym że przedrostek wstawiany jest na początku bieżącego arkusza a przyrostek na jego końcu.
There are aliases: '_start_' is alias for '{{'
'_end_' is alias for '}}'