Szablony Django
14 July 2008
Comments
Szablon to zwykły plik tekstowy zawierający zazwyczaj kod HTML oraz tagi - zmienne, za które zostanie wstawiona określona treść bądź też tagi kontrolujące logikę szablonu.
Zmienne
Zmienne wyglądają w szablonach django tak:{{ nazwa_zmiennej }}
Gdzie nazwa_zmiennej to owa nazwa zwracana przez widok. Jeżeli widok zwraca jakiś obiekt posiadający atrybuty np. słownik to można odwołać się do nich stosując kropkę:
{{ nazwa_zmiennej.atrybut }}
Jeżeli podana zmienna nie istnieje to wstawiona zostanie wartość TEMPLATE_STRING_IF_INVALID z ustawień projektu.
Filtry
Filtry modyfikują zwracane przez zmienne dane. Filtry stosuje się w następujący sposób:{{ zmienna|nazwa_filtru }} {{ zmienna|linebreaks }} // stosowanie kilku filtrów {{ zmienna|escape|linebreaks }} // filtr z argumentem {{ zmienna|escape:"argument" }}
- safe - zapobiega enkodowaniu tagów HTML
- add - dodaje do zmiennej podaną wartość (zmienna|add:"liczba")
- addslashes - dodaje ukośniki
- capfirst - Pierwsza litera wyrażenia zmieniana jest na dużą literę.
- cut - usuwa wszystkie wystąpienia podanego łańcucha w zmiennej (zmienna|cut:"łańcuch")
- date - formatuje zmienną w postaci daty. Taka sama składnia jak "now"
- default - jeżeli zmienna jest niedostępna wykorzystuje podaną wartość
- default_if_none - to samo z tym że pod warunkiem że zmienna ma wartość None
- dictsort - pobiera listę słowników i zwraca ją posortowaną według podanych parametrów
- dictsortreversed - to samo tyle że sortuje odwrotnie
- divisibleby - zwraca True jeżeli wartość zmiennej dzieli się bez reszty przez podany argument (liczbę)
- escape - "ucieka: z formatowania HTML, zamienia < > oraz cudzysłowy
- filesizeformat - formatuje podaną wartość do sensownego formatu rozmiaru (KB, MB itd.)
- first - Zwraca pierwszy element z listy
- fix_ampersands - zamienia & na jego notację znakową (entity)
- floatformat - zaokrągla liczby zmiennoprzecinkowe do jednego miejsca po przecinku (jeżeli istnieją liczby po przecinku)
- get_digit - pobiera z liczby cyfrę o określonej parametrem lokacji (0 - pierwsza cyfra itd.)
- join - łączy listy
- length - zwraca długość elementów (np. do list)
- length_is - zwraca True jeżeli długość (length) wartość jest argumentem
- linebreaks - zamienia przejścia do nowej linii na p i br
- linebreaksbr - to samo tyle że stosuje jedynie br
- linenumbers - wyświetla tekst z numerami wierszy
- lower - zamienia duże litery na małe
- make_list - zamienia wartość na listę
- phone2numeric - zamienia wartość na numer telefonu, np. "800-COLLECT" na "800-2655328". Nie sprawdza "sensu" wyrażenia
- pluralize - zwraca sufiks jeżeli wartość nie jest równa 1. Domyślnie zwraca "s"
- random - zwraca losowy obiekt z listy
- removetags - usuwa tagi X/HTML ze zmiennej (podane jako argument, oddzielone spacją)
- slice - zachowuje się jak slice w Pythonie
- striptags - usuwa wszystkie tagi X/HTML
- time - formatuje wartość jako czas/datę. Taka sama składnia jak "now"
- timesince - podaje ile czasu minęło od daty w zmiennej do dziś. Można podać argument - czas odniesienia zamiast bieżącej daty
- timeuntil - tak jak wyżej tyle że podaje ile czasu do danego wydarzenia (przyszłość)
- title - formatuje łańcuch na tytuł
- truncatewords - przycina łańcuch do podanej długości
- unordered_list - Przerabia listę na listę li/ul
- upper - wszystkie litery zmieniane są na duże
- urlencode - koduje zmienne dla URLi
- urlize - zamienia linki w zwykłym tekście na odnośniki, w które można kliknąć
- urlizetrunc - to co wyżej z tym że przycina je do podanej długości (tytuł linka)
- wordcount - zwraca ilość słów
- wordwrap - łamie wiersze przy podanej szerokości
Tagi
Tag wygląda tak:{% tag %}
Niektóre wymagają taga zamykającego. Rolą tagów jest głównie sterowanie logiką wyświetlanych danych. Django ma wbudowanych kilkanaście tagów:
- block - dodaje blok, który może być nadpisany przez szablony dzieci
- comment - wszystko między {% comment %} i {% endcomment %} jest komentarzem w kodzie i nie pojawi się na stronie
- cycle - przechodzi przez podane wartości. Stosowany w pętli:
lub bez:
{% for o in some_list %} <tr class="{% cycle row1,row2 %}"> ... </tr> {% endfor %}
<tr class="{% cycle row1,row2,row3 as rowcolors %}">...</tr> <tr class="{% cycle rowcolors %}">...</tr> <tr class="{% cycle rowcolors %}">...</tr>
- debug - wyświetla dane debuggera
- extends - oznacza że ten szablon dziedziczy z podanego w tagu szablonu, np: {% extends "base.html" %}
- filter - nakłada podane filtry na tekst między tagami:
{% filter escape|lower %} Tekst {% endfilter %}
- firstof - Zwróci pierwszą wartość różną od False lub nic jeżeli takiej nie znajdzie: {% firstof var1 var2 var3 %}
- for - pętla:
<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
- forloop.counter - numer bieżącej iteracji
- forloop.counter0 - numer bieżącej iteracji liczony od 0
- forloop.revcounter - numer iteracji od tyłu
- forloop.revcounter0 - numer iteracji od tyłu, liczony od 0
- forloop.first - zwraca True jeżeli jest to pierwsza iteracja
- forloop.last - zwraca True jeżeli jest to ostatnia iteracja
- forloop.parentloop - dla zagnieżdżonych pętli, oznacza nadrzędną pętle
- if - jeżeli podana zmienna nie ma wartości False to wykona blok między tagami.
{% if athlete_list %} zmienna coś ma... {% else %} zmienna nic nie ma {% endif %}
- ifequal - podobnie jak if tyle że sprawdza czy dwie podane zmienna mają te same wartości
{% ifequal user.id comment.user_id %} ... {% endifequal %}
- ifnotequal - jak powyżej tylko "jeżeli nie równe"
- include - ładuje i parsuje szablon: {% include "foo/bar.html" %}
- load - ładuje niestandardowy tag
- now - pokazuje bieżącą datę, atrybut określa formatowanie. Znaczniki zbliżone do formatowania funkcji date w PHP. Szczegóły w dokumentacji szablonów.
- regroup - przegrupowuje elementy. Szczegóły - patrz link obok
- spaceless - usuwa nadmiarowe spacje, przejścia do nowej linii, w kodzie X/HTML
- ssi - ładuje podany plik, wymaga bezwzględnej ścieżki.
RkBlog
Comment article