O projekcie / Python / SimpleTAL / Przewodnik
Wprowadzenie
Jest to prosty przewodnik dla języków TAL oraz TALES. Formalne specyfikacje możesz znaleźć na stronach projektu Zope: TAL, TALES oraz METAL.
Komendy TAL
TAL składa się z siedmiu komend (podane według priorytetu wykonywania): define, condition, repeat, content, replace, attributes oraz omit-tag. Komendy te zapisuje się jako attrybuty tagów w HTML lub XML, np.: <div tal:content="text">Tu będzie wstawiony tekst.</div>.
tal:define
Składnia:tal:define="[local | global] name value [; define-expression...]
Opis: ustawia wartość zminnej "name" na "value". Domyślnie zmienna będzie widoczna w "lokalnym" zasięgu, co oznacza dany tag oraz wszyskie w nim zagnieżdzone. Jeśli użyjemy słowa "global" zmienna będzie widoczna od tego miejsca, do końca dokumentu.
Przykład:
<div tal:define="global title book/title; local chapterTitle book/chapter/title"></div>
tal:condition
Składnia: tal:condition="expression"Opis: Jeśli "expression" jest równoważne z "True", to dany tag oraz wszystkie tagi w nim zagnieżdżone będą wypisane, w przeciwnym przypadku zostaną pominięte.
Przykład: <h1 tal:condition="user/firstLogin">Witaj na stronie!</h1>
tal:repeat
Składnia: tal:repead="name expression"Opis: Jeśli "expression" jest sekwencją powtarza dany tag oraz wszystkie taki zagnieżdżone dla każdego elementu sekwencji. Do zmiennej "name" będą kolejno przypisywane wartości danych elementów sekwencji. Jest to również nazwa zmiennej pętli - zmienna ta jest dostępna przez wywołanie "repeat/name" i można z niej pobrać następujące wartości:
- index - numer iteracji, począwszy od 0
- number - numer iteracji, począwszy od 1
- even - True jeśli jest to parzysta iteracja
- odd - True jeśli jest to nie parzysta iteracja
- start - True jeśli jest to pierwszy element sekwencji
- end - True jeśli jest to ostatni element sekwencji
- length - długość sekwencji, dla iteratorów zwraca maxint, ponieważ rzeczywista długość nie jest wówczas znana
- letter - mała litera alfabetu dla danej iteracji, począwszy od "a"
- Letter - wielka litera alfabetu dla danej iteracji, począwszy od "A"
- roman - rzymski numer iteracji, począwszy od "i"
- Roman - rzymski numer iteracji, pisany wielkimi literami, począwszy od "I"
<table>
<tr tal:repeat="fruit basket">
<td tal:content="repeat/fruit/number"></td>
<td tal:content="fruit/name"></td>
</tr>
</table>
tal:content
Składnia: tal:content="[text | structure] expression" Opis: Zamienia zawartość taga na wartość zwracaną przez "expression". Domyślnie oraz przy użyciu słowa kluczowego "text" niektóre znaki zostają zamienione (np. < oraz > zostają zamienione na < i >). Jeśli słowo "structure" jest obecne wówczas tekst pozostaje bez zmian.Przykład: <h1 tal:content="user/firstName"></h1>
tal:replace
Składnia: tal:replace="[text | structure] expression"Opis: Działa podobnie do tal:content, z wyjątkiem tego, że dany tag (a nie tylko tagi zagnieżdzone) zostaje usunięty.
Przykład: <h1>Witaj <b tal:replace="user/firstName"></b></h1>
tal:attributes
Składnia: tal:attributes="name expression[;attributes-expression]"Opis: w danym tagu zmienia wartość atrybuty "name" na wartość zwracaną przez "expression". Jeśli ta wartość jest pusta, wówczas atrybut jest pomijany. Jeśli "expression" zwraca "default" wówczas wartość atrybutu pozostaje niezmieniona. Jeśli "expression" wymaga średnika powinien on zostać zapisany jako ;;.
Przykład: <a tal:attributes="href user/homepage;title user/fullname">Strona domowa</a>
tal:omit-tag
Składnia: tal:omit-tag="expression"Opis: Jeśli "expression" zwraca True, usuwa dany tag, pozostawiając zawarty w nim tekst i zagnieżdżone tagi.
Przykład: <p><b tal:omit-tag="not:user/firstVisit">Witaj</b> na stronie!</h1>
TALES
Wyrażenia używane w TAL są nazwane wyrażeniami TALES. Najprostsze wyrażenie TALES to ścieżka odwołująca się to wartości, np. user/login odwołuje się do elementu login w zmiennej user.path
Składnia: [path:]string[|TALES Expression]Opis: Ścieżka, opcjonalnie poprzedziona modyfikatorem 'path:', odwołuje się do pola obiektu. Znak '/' jest używany jako separator pomiędzy nazwą obiektu, a nazwą pola. Pola, również mogą być obiektami i jako takie posiadać kolejne pola. Znaki '|', '(' oraz ')' są używane do znalezienia alternatywnych wartości, jeśli pierwszy pierwsza ścieżka nie istnieje lub zwraca wastość 'Nothing'.
Przykład: <p tal:content="book/chapter/title | string:Untitled"></p>
Jest kilka, wbudowanych ścieżek, które mogą być użyte:
- nothing działa jak 'none' w Pythonie
- default pozostawia oryginalną wartość elementu (taga lub atrybutu)
- options słownik wartości przekazanych do szablonu (poprzez metodę Context.__init__)
- repeat dostęp do bierzącej zmiennej pętli (zobacz tal:repeat)
- attrs słownik oryginalnych wartości atrybutów danego taga
- CONTEXTS słownik zawierający wszystkie powyższe zmienne
exists
Składnia: exists:pathOpis: Zwraca true, jeśli ścieżka istnieje, zwraca false w przeciwnym wypadku. Jest to użyteczne do usuwania pustych tagów.
Przykład: <p tal:omit-tag="not:exists:book/chapter/title" tal:content="book/chapter/title"></p>
nocall
Składnia: nocall:path Opis: Zwraca odwołanie do ścieżki, ale bez jej ewaluacji. Przydatne gdy istnieje potrzeba zdefiniowana nowej nazwy dla danej funkcji, a nie jej wartości.Przykład: <p tal:define="title nocall:titleFunction" tal:content="title"></p>
not
Składnia: not:tales-pathOpis: Zwraca odwrotność wyrażenia tales-path. Jeśli wyrażenie jest prawdziwe to zostanie zwrócone false.
Przykład: <p tal:condition="not: user/firstLogin">Welcome to the site!</p>
string
Składnia: string:textOpis: Zwraca wartość łańcucha znaków z podstawionymi wartościami użytych zmiennych, używanych w formie ${pathName} oraz $pathName
Przykład: <b tal:content="string:Welcome ${user/name}!"></b>
python
Składnia: python:python-codeOpis: Przetwarza pythonowy kod i zwraca wartość. Kod Pythona musi być poprawnie skonwertowany, np. "python: 1 < 2" powinno zostać przepisane na "python: 1 < 2". Kod Pythona ma dostęp do wszystkich funkcji, włączając cztery dodatkowe funkcje, które odnoszą się do odpowiednich poleceń TALES: path (string), string (string), exists (string) oraz nocall (string)
Przykład: <div tal:condition="python: path (basket/items) > 1">Checkout!</div>
METAL Macro Language
METAL to język makr, powszechnie używany z TAL oraz TALES. METAL pozwala na wielokrotne użycie określonej części szablonu.metal:define-macro
Składnia: metal:define-macro="name"Opis: Definiuje nowe makro, które może być potem dostępne pod nazwą "name".
Przykład: <div metal:define-macro="footer">Copyright <span tal:content="page/lastModified">2004</span></div> metal:use-macro
Składnia: metal:use-macro="expression"
Opis: Przetwarza "expression" i używa go jako makro.
Przykład: <div metal:use-macro="footer"></div>
metal:define-slot
Składnia: metal:define-slot="name"Opis: Definiuje slot, pozwalający na późniejsze wstawienie wartości.
Przykład: <div metal:define-macro="footer"> <b>Standard disclaimer for the site.</b> <i metal:define-slot="Contact">Contact admin@site.com</i> </div>
metal:fill-slot
Składnia: metal:fill-slot="name"Opis: Zamienia zawartość elementu z danym slotem.
Przykład: <div metal:use-macro="footer"> <i metal:fill-slot="Contact">Contact someone else</i> </div>
QuasiGame

