Rozdział 22 · Tworzenie stron internetowych z Python

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).

templates/spisok.html
<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 &lt; 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 wyłącza dokładnie tę ochronę
Jinja ma filtr |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:

templates/base.html
<!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>
templates/index.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.

Praktyka: Szablony i automatyczne ucieczki
Moduł flask nie jest zainstalowany w środowisku przeglądarki Pyodide – działa lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →