Szablony po stronie serwera — Jinja2 i Handlebars
Używanie silników szablonów do dynamicznego renderowania HTML na serwerze
Szablony po stronie serwera — Jinja2 i Handlebars to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.
Po co szablony po stronie serwera?
Szablony po stronie serwera generują HTML na serwerze przed wysłaniem go do przeglądarki. Zapewniają znaczniki przyjazne SEO już przy pierwszej odpowiedzi, działają bez JavaScriptu i eliminują problem "pustej strony do czasu wczytania JavaScriptu", typowy dla renderowania wyłącznie po stronie klienta.
Jinja2 (Python)
Jinja2 to de facto standardowa biblioteka szablonów dla Pythona — używana przez Flask, Django (za pośrednictwem dołączonego backendu lub backendu jinja2), Pelican i mkdocs. Logikę zapisuje się w znacznikach {% %}, a wyrażenia w znacznikach {{ }}: <h1>{{ title }}</h1> służy do wyświetlania zmiennych, a {% for item in items %} do tworzenia pętli.
<ul>
{% for item in items %}
<li>{{ item.name }} — ${{ item.price }}</li>
{% endfor %}
</ul>Handlebars (JavaScript)
Handlebars to najczęściej używana biblioteka szablonów dla Node.js, popularna w przypadku wiadomości e-mail o charakterze transakcyjnym (SendGrid, Mailgun) oraz SSR za pośrednictwem Express. Wyrażenia zapisuje się w {{ }}, a bloki za pomocą {{# }}: {{#each items}}<li>{{name}}</li>{{/each}}.
<ul>
{{#each items}}
<li>{{name}} — ${{price}}</li>
{{/each}}
</ul>Automatyczne kodowanie
Oba silniki domyślnie automatycznie kodują dane wyjściowe zmiennych — {{ user.name }} przy name = "<script>" zwraca "<script>", neutralizując XSS. Należy zawsze polegać na automatycznym kodowaniu; jawnego filtra raw (Jinja: {{ x|safe }}, Handlebars: {{{x}}}) należy używać wyłącznie w przypadku zaufanego kodu HTML.
Dziedziczenie szablonów
Jinja: {% extends "base.html" %} w szablonie potomnym oraz {% block content %}{% endblock %} w szablonie bazowym. Handlebars: {{#> layout }}{{/layout}} z blokami partials. Pozwala to raz zdefiniować strukturę układu bazowego, a następnie wypełniać zmienne obszary na poszczególnych stronach.
Dołączanie i partials
Jinja: {% include "header.html" %}. Handlebars: {{> header}}. Oba rozwiązania wstawiają inny szablon do bieżącego. Partials są podstawowymi elementami dużych bibliotek komponentów — składa się je w strony i layouty.
Filtry i helpery
Filtry Jinja: {{ price|currency }}. Helpery Handlebars: {{currency price}}. Oba rozwiązania pozwalają wywoływać funkcje formatujące wartości. Własne helpery warto definiować na potrzeby transformacji specyficznych dla projektu, takich jak formatowanie dat, tworzenie liczby mnogiej czy budowanie linków.
Instrukcje warunkowe
Jinja: {% if user.is_logged_in %}Welcome{% else %}Sign in{% endif %}. Handlebars: {{#if user.isLoggedIn}}Welcome{{else}}Sign in{{/if}}. Szablony można rozgałęziać na podstawie danych bez uciekania się do kodu JS po stronie klienta w celu ukrywania i wyświetlania treści.
Wydajność
Oba silniki wstępnie kompilują szablony do funkcji, a następnie wywołują te funkcje przy każdym żądaniu. Kompilacja odbywa się jednokrotnie, a renderowanie jest szybkie. W przypadku witryn o bardzo dużym ruchu warto buforować wyrenderowany wynik na brzegu sieci (Varnish, Cloudflare), zamiast ponownie renderować identyczne strony.
Lokalizacja
Szablony należy łączyć z bibliotekami i18n: Jinja2 + Babel w Pythonie, Handlebars + i18next w Node. Szablony zawierają klucze tłumaczeń ({{ t "welcome" }}), a warstwa i18n rozwiązuje je do właściwego języka. Dzięki temu jeden szablon może renderować treści w wielu językach.
Szablony frameworków
Współczesne frameworki mają własne formaty szablonów: ERB (Rails), Twig (Symfony), Blade (Laravel), Razor (.NET), Slim/Haml (bardziej zwięzłe). Wzorce są takie same, różni się tylko składnia. Należy wybrać silnik pasujący do języka backendu i jego ekosystemu.
Przejście na komponenty
Szablony świetnie sprawdzają się w tradycyjnych witrynach renderowanych po stronie serwera. W przypadku bardziej interaktywnych aplikacji frameworki takie jak Next.js (React), Nuxt (Vue) i SvelteKit zacierają granicę — renderują szablony na serwerze, a te same komponenty są następnie poddawane hydratacji po stronie klienta, aby zapewnić interaktywność.
Sprawdzenie wiedzy
Dlaczego automatyczne escapowanie jest domyślnym zachowaniem silników szablonów, takich jak Jinja2 i Handlebars?
Podsumowanie
Silniki szablonów renderowanych po stronie serwera (Jinja2 dla Pythona, Handlebars dla JS oraz ERB/Twig/Blade dla innych stosów) generują HTML na serwerze przy użyciu zmiennych, pętli, instrukcji warunkowych, partials i dziedziczenia. Automatyczne escapowanie domyślnie chroni przed XSS. W przypadku witryn wielojęzycznych warto korzystać z bibliotek i18n. Szablony są fundamentem, na którym współczesne frameworki budują hydratację.
Często zadawane pytania
Czy lekcja „Szablony po stronie serwera — Jinja2 i Handlebars” jest bezpłatna?
Tak — pełny tekst „Szablony po stronie serwera — Jinja2 i Handlebars” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Szablony po stronie serwera — Jinja2 i Handlebars”?
Używanie silników szablonów do dynamicznego renderowania HTML na serwerze Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć HTML Academy?
Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Szablony po stronie serwera — Jinja2 i Handlebars”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?
Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wydzielanie komponentów i partiale
- Szablony po stronie serwera — Jinja2 i Handlebars
- HTML w systemach projektowych
- Integracja z dokumentacją i styleguide’em