Jinja: szablony danych HTML
szablon HTML-a z Jinja wyrażeniami i Python danymi oraz wbudowaną ochroną przed przypadkowym znaczeniem.
Rozdział 22.5 już używa szablonów, więc przyjrzyjmy się, jak działa silnik
Jinja, którego Flask używa domyślnie. Szablon jest regularny
HTML-file, gdzie wstawiane są dwa typy struktur: {{ выражение }}
(wyświetl wartość) i {% команда %} (warunek, pętla,
dziedziczenie).
<ul>
{% for zadacha in zadachi %}
<li>{{ zadacha.title }}</li>
{% endfor %}
</ul>
{% if not zadachi %}
<p>Задач пока нет.</p>
{% endif %}
Automatyczne osłony – Jinja domyślnie chroni cię
Jeśli wartość wstawia {{ }}, zawiera
HTML- znacznik (na przykład użytkownik wpisał <b>),
Jinja domyślnie ucieka znaki specjalne — zamienia je
< w < i tak dalej.
Przeglądarka pokaże to jako zwykły tekst zamiast jako znacznik. To się nazywa
automatyczne osłony (autoescaping), i jest włączony dla szablonów HTML-.
Flask domyślnie.
|safe, który wyłącza automatyczne escapowanie dla określonej wartości, Jinja wkleja go tak, jak jest, włącznie z marżą. To jest odpowiednie dla tekstu, nad którym masz pełną kontrolę (na przykład HTML zakodowany na stałe w kodzie aplikacji), ale nie dla danych wprowadzonych przez użytkownika: Do czego to prowadzi w praktyce, pokazano w sekcji 22.32. Jeśli masz wątpliwości, nie dodawaj |safe.Dziedziczenie szablonów — wspólny szkielet strony
Nie powtarzać <head>, nawigacja i połączenia
CSS w każdym szablonie stwórz bazowy szablon z nazwanymi blokami, które się zapełniają
Szablony potomne:
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title>{% block title %}Список задач{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
{% extends "base.html" %}
{% block content %}
<h1>Мой список задач</h1>
...
{% endblock %}
{% extends "base.html" %} mówi: „Weź podstawy
szablon i wstaw moją treść do oznaczonych pól.” base.html i kilka
Szablony dziecięce.