Шаблоны в FastAPI
Теперь, когда мы узнали, как обрабатывать ответы на запросы, включая ошибки в предыдущем разделе, мы можем приступить к отображению ответов на запросы на веб-странице. В этой главе мы узнаем, как отображать ответы от нашего API на веб-странице, используя шаблоны на основе Jinja, который представляет собой язык шаблонов, написанный на Python, предназначенный для облегчения процесса визуализации ответов API.
Шаблонирование - это процесс отображения данных, полученных от API, в различных форматах. Шаблоны действуют как компонент интерфейса в веб-приложениях.
Понимание Jinja
Jinja — это механизм шаблонов, написанный на Python, предназначенный для облегчения процесса рендеринга ответов API. В каждом языке шаблонов есть переменные, которые заменяются фактическими значениями, переданными им при отображении шаблона, и есть теги, управляющие логикой шаблона. Документацию на Jinja вы можете посмотреть по этой ссылке.
Механизм шаблонов Jinja использует фигурные скобки { }, чтобы отличить свои выражения и синтаксис от обычного HTML, текста и любой другой переменной в файле шаблона.
Синтаксис {{ }} называется блоком переменных.
Три общих синтаксических блока, используемых в языке шаблонов Jinja, включают следующее:
{% … %}– Этот синтаксис содержит управляющие структуры, такие какif/else, циклы и макросы.{{ message.text }}– Этот синтаксис используется для вывода значений переданных ему выражений.{# Simple comment #}– Этот синтаксис используется при написании комментариев и не отображается на веб-странице.
Переменные шаблона Jinja могут относиться к любому типу или объекту Python, если их можно преобразовать в строки. Тип модели, списка или словаря можно передать шаблону и отобразить его атрибуты, поместив эти атрибуты во второй блок, указанный ранее.
Фильтры
Несмотря на сходство синтаксиса Python и Jinja, такие модификации, как объединение строк, установка первого символа строки в верхний регистр и т. д., не могут быть выполнены с использованием синтаксиса Python в Jinja. Поэтому для выполнения таких модификаций у нас в Jinja есть фильтры. Фильтр отделяется от переменной вертикальной чертой (|) и может содержать необязательные аргументы в круглых скобках. Фильтр определяется в этом формате:
{{ variable | filter_name(*args) }}
Если нет аргументов, определение становится следующим:
{{ variable | filter_name }}
Давайте рассмотрим некоторые распространенные фильтры:
Переменная фильтра по умолчанию используется для замены вывода переданного значения, если оно оказывается None:
{{ message.text | default('This is a simple message') }}
Этот фильтр используется для отображения необработанного вывода HTML:
{{ "<title>My Application</title>" | escape }}
И мы получим не обработанный HTML код - <title>My Application</title>
Фильтры преобразования, они включают фильтры int и float, используемые для преобразования из одного типа данных в другой:
{{ 3.142 | int}} -> 3
{{ 31 | float }} -> 31.0
Фильтр объединения используется для объединения элементов списка в строку, как в Python:
{{ ['My', 'first', 'project', 'FastAPI'] | join(' ') }}
И мы получим результат как строку "My first project FastAPI"
Фильтр длины используется для возврата длины переданного объекта. Он выполняет туже роль, что и len() в Python:
Message count: {{ message | length }}
Полный список фильтров и дополнительные сведения о фильтрах в Jinja вы можете посмотреть в документации https://jinja.palletsprojects.com/en/latest/templates/.
Просто и лаконично объяснили что такое фильтры, Спасибо!