10 lutego 2023
Wprowadzenie do szablonów w Django
10 lutego 2023
W developmencie webowym szablony odgrywają kluczową rolę, ponieważ pomagają określić, jak informacje są wyświetlane i formatowane na stronie internetowej. Szablony Django nie są wyjątkiem. Stanowią integralną część Django, dostarczając potężne narzędzie do generowania dynamicznej zawartości HTML.
W swej istocie, szablony Django to pliki tekstowe, które definiują strukturę lub układ pliku (zazwyczaj pliku HTML), z zastępczymi miejscami dla rzeczywistej zawartości. Te zastępcze miejsca są zastępowane prawdziwą zawartością, gdy szablon jest renderowany, co jest procesem łączenia szablonu z określonym kontekstem (danymi), aby wyprodukować wyjście (kompletną stronę HTML gotową do wysłania do przeglądarki klienta).
Szablon Django jest napisany Django Template Language (DTL)
, który jest prostym, nieprogramistycznym językiem, którego może nauczyć się każdy projektant, który rozumie HTML. DTL umożliwia użycie prostej logiki w kodzie HTML, co może być niezwykle potężne do tworzenia skomplikowanych widoków.
Podsumowując, szablony Django są mostem między wyglądem twoich danych a tym, jak chcesz, aby były wyświetlane. Są nieodłączną częścią każdej aplikacji Django, a zrozumienie ich jest kluczem do opanowania Django.
Podstawowa składnia szablonów Django
Szablony Django są zaprojektowane tak, aby osoby znające HTML czuły się komfortowo i znajomo, ale mają swoją własną składnię, którą dyktuje język szablonów Django (DTL). Ten język wprowadza kilka specjalnych konstrukcji, głównie tagów i filtrów, umożliwiających szablonom obsługę logiki i manipulację danymi.
W DTL
wyróżniamy trzy kluczowe elementy składni:
Zmienne: Zmienne są używane do wstawiania wartości z kontekstu do szablonu. Są otoczone podwójnymi nawiasami klamrowymi, takimi jak: {{ zmienna }}
. Gdy szablon jest renderowany, {{ zmienna }}
zostanie zastąpiona wartością zmiennej.
Tagi: Tagi zapewniają logikę w szablonie, pozwalając na wykonywanie pętli, warunków i innych. Tagi są otoczone przez {% and %}
. Na przykład, {% if user.is_authenticated %}
sprawdzi, czy aktualny użytkownik jest uwierzytelniony.
Filtry: Filtry pozwalają na modyfikację zmiennych do wyświetlania. Są oznaczane przez znak pipe |
. Na przykład, {{ name|lower }}
przekształci wartość name na małe litery.
Teraz spójrzmy na bardzo podstawowy przykład szablonu Django. Wyobraź sobie, że budujesz bloga i chcesz wyświetlić listę tytułów postów.
Zrozumienie tagów szablonów Django
Tagi szablonów są kluczową funkcją języka szablonów Django, pozwalając na implementację logiki bezpośrednio w twoich szablonach. Są otoczone przez {% i %}.
Przyjrzyjmy się niektórym z najpopularniejszych wbudowanych tagów szablonów Django:
{% for %} i {% endfor %}
: Te tagi tworzą pętlę, która iteruje przez sekwencję. Na przykład, {% for post in posts %} będzie przechodzić przez każdy post w posts.
{% if %} i {% endif %}
: Te tagi oceniają warunek i wyświetlają sekcję szablonu, jeśli warunek jest prawdziwy. Na przykład, {% if user.is_authenticated %} sprawdzi, czy użytkownik jest uwierzytelniony przed wyświetleniem następnej sekcji szablonu.
{% url 'viewname' %}
: Ten tag jest używany do wyświetlania URL dla danego widoku. Jest to potężna funkcja, ponieważ pozwala uniknąć zakodowania na stałe URL-i w szablonach.
{% csrf_token %}
: Ten tag jest używany do ochrony przed fałszywymi żądaniami między witrynami. Powinien być uwzględniony w każdym formularzu HTML w szablonach.
Zobaczmy te tagi w akcji w szablonie Django. Załóżmy, że tworzymy bloga i chcemy wyświetlić listę postów na blogu oraz formularz dla uwierzytelnionych użytkowników do tworzenia nowych postów.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Blog</title>
<!-- Bootstrap CSS -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>My Blog</h1>
<!-- Display the list of posts -->
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% empty %}
<li>No posts yet.</li>
{% endfor %}
</ul>
<!-- Display a form for authenticated users -->
{% if user.is_authenticated %}
<form action="{% url 'create_post' %}" method="POST">
{% csrf_token %}
<label for="title">Title:</label>
<input type="text" id="title" name="title">
<input type="submit" value="Create">
</form>
{% endif %}
</div>
</body>
</html>
W tym przykładzie używamy tagu {% for %}
do iteracji przez każdy post w posts, tagu {% if %}
do wyświetlania formularza tylko dla uwierzytelnionych użytkowników, tagu {% url %}
do unikania zakodowania na stałe URL widoku 'create_post', oraz tagu {% csrf_token %}
do ochrony formularza przed cross site forgery w naszej witrynie.
Tagi szablonu czynią szablony Django potężnymi i elastycznymi, umożliwiając budowanie złożonych i dynamicznych stron.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Blog</title>
<!-- Bootstrap CSS -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>My Blog</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% empty %}
<li>No posts yet.</li>
{% endfor %}
</ul>
</div>
</body>
</html>
W tym przykładzie używamy tagu {% for %}
do przechodzenia przez listę postów, a składnię {{ }}
do wyjścia tytułu każdego postu. Używamy również tagu {% empty %}
do wyświetlania komunikatu, jeśli lista postów jest pusta.
To jest tylko proste wprowadzenie do składni szablonów Django. Gdy zagłębimy się w tagi i filtry, zobaczysz, jak naprawdę potężny może być ten system.
Zaawansowane filtry szablonów w Django
W szablonach Django filtry są sposobem na transformację danych zmiennych. Są stosowane do zmiennych za pomocą znaku pipe (|
), po którym następuje nazwa filtra i opcjonalnie parametr.
Oto niektóre powszechnie używane filtry w szablonach Django:
date: Formatuje datę zgodnie z danym formatem. Na przykład, {{ post.date|date:"F j, Y" }}
wyświetliłby datę postu w formacie takim jak "1 stycznia 2023".
length: Zwraca długość listy. Na przykład, {{ posts|length }}
zwróciłoby liczbę postów.
default: Zwraca domyślną wartość, jeśli zmienna jest fałszywa lub pusta. Na przykład, {{ name|default:"guest" }}
zwróciłoby "guest
", jeśli name nie jest podane.
lower: Konwertuje łańcuch na małe litery. Na przykład, {{ name|lower }}
przekształciłoby wartość name na małe litery.
Zobaczmy te filtry w akcji w szablonie. Załóżmy, że nadal pracujemy nad naszym blogiem i chcemy wyświetlić listę postów na blogu z ich datami utworzenia, liczbą postów i domyślną nazwą dla użytkowników, którzy nie są zalogowani.
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Blog</title>
<!-- Bootstrap CSS -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Welcome, {{ user.name|default:"Guest" }}</h1>
<h2>You're viewing {{ posts|length }} posts.</h2>
<!-- Display the list of posts -->
<ul>
{% for post in posts %}
<li>
<h3>{{ post.title }}</h3>
<p>Posted on {{ post.date|date:"F j, Y" }}</p>
</li>
{% empty %}
<li>No posts yet.</li>
{% endfor %}
</ul>
</div>
</body>
</html>
W tym przykładzie używamy filtra default, aby wyświetlić "Guest
", jeśli nie podano nazwy użytkownika, filtra length do policzenia liczby postów i filtra date do sformatowania daty posta.
Filtry szablonów Django oferują potężne narzędzie do manipulowania i wyświetlania danych, co sprawia, że twoje szablony są bardziej elastyczne i dynamiczne.
Podsumowanie i dobre praktyki
Przez ten post przeszliśmy przez wiele zagadnień, zagłębiając się w świat szablonów Django. Dowiedzieliśmy się, czym są szablony Django i jakie mają znaczenie w aplikacji Django, zrozumieliśmy podstawową składnię szablonów Django i poznaliśmy najczęściej używane tagi i filtry szablonów.
Oto krótkie podsumowanie:
1. Szablony Django to pliki tekstowe, zwykle napisane w HTML
, które definiują strukturę strony internetowej. Pozwalają one generować dynamiczną zawartość sieciową, zastępując symbole zastępcze prawdziwymi danymi podczas renderowania szablonu.
2. W tych szablonach używany jest Django Template Language(DTL)
, wprowadzając zmienne, tagi i filtry, które pozwalają na logikę i manipulację danymi bezpośrednio w szablonie.
3. Tagi szablonów pozwalają wykonywać logikę w szablonach, taką jak pętle i warunki. Do najczęstszych tagów należą {% for %}
, {% if %}
, {% url %}
i {% csrf_token %}
.
4. Filtry szablonów pozwalają transformować dane zmiennych. Do najczęściej stosowanych filtrów należą date
, length
, default
i lower
.
Zanim zakończymy, omówmy kilka najlepszych praktyk przy pracy z szablonami Django:
Minimalizuj Logikę: Szablony są zaprojektowane do wyświetlania informacji, a nie do prowadzenia ciężkiej logiki. Jeżeli to możliwe, utrzymuj złożoną logikę w widokach i modelach, a nie w szablonach.
DRY (Don't Repeat Yourself): Django ma potężny system dziedziczenia szablonów, który pozwala na ponowne użycie części szablonów (takich jak nagłówki i stopki) na różnych stronach. Wykorzystaj go, aby uniknąć powtarzania.
Używaj {% url %}: Pomaga to utrzymać URL-e spójne i ułatwia ich aktualizację.
Opanowanie szablonów Django jest kluczowym krokiem do biegłości w Django. To szeroki temat, a jest jeszcze wiele do odkrycia, jak dziedziczenie szablonów i niestandardowe tagi i filtry szablonów. Nie zatrzymuj się tutaj - kontynuuj naukę, kontynuuj odkrywanie!