Szablony Django

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" }}
Filtry wykonują zazwyczaj różne operacje formatujące tekst - np. łamią linie, zmieniają wielkość liter, parsują określone tagi. Dostępnych wbudowanych filtrów jest bardzo dużo:
  • 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:
    {% for o in some_list %}
        <tr class="{% cycle row1,row2 %}">
            ...
        </tr>
    {% endfor %}
    
    lub bez:
    <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>
    
Dodatkowe zmienne wewnątrz pętli:
  • 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

Django, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact