# Шаблоны { #templates }
Вы можете использовать любой шаблонизатор вместе с **FastAPI**.
Часто выбирают Jinja2 — тот же, что используется во Flask и других инструментах.
Есть утилиты для простой настройки, которые вы можете использовать прямо в своем приложении **FastAPI** (предоставляются Starlette).
## Установка зависимостей { #install-dependencies }
Убедитесь, что вы создали [виртуальное окружение](../virtual-environments.md){.internal-link target=_blank}, активировали его и установили `jinja2`:
```console
$ pip install jinja2
---> 100%
```
## Использование `Jinja2Templates` { #using-jinja2templates }
- Импортируйте `Jinja2Templates`.
- Создайте объект `templates`, который сможете переиспользовать позже.
- Объявите параметр `Request` в *операции пути*, которая будет возвращать шаблон.
- Используйте созданный `templates`, чтобы отрендерить и вернуть `TemplateResponse`; передайте имя шаблона, объект `request` и словарь «context» с парами ключ-значение для использования внутри шаблона Jinja2.
{* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *}
/// note | Примечание
До FastAPI 0.108.0, Starlette 0.29.0, `name` был первым параметром.
Также раньше, в предыдущих версиях, объект `request` передавался как часть пар ключ-значение в контексте для Jinja2.
///
/// tip | Совет
Если указать `response_class=HTMLResponse`, интерфейс документации сможет определить, что ответ будет в формате HTML.
///
/// note | Технические детали
Можно также использовать `from starlette.templating import Jinja2Templates`.
**FastAPI** предоставляет тот же `starlette.templating` как `fastapi.templating` просто для удобства разработчика. Но большинство доступных ответов приходят напрямую из Starlette. Так же и с `Request` и `StaticFiles`.
///
## Написание шаблонов { #writing-templates }
Затем вы можете создать шаблон в `templates/item.html`, например:
```jinja hl_lines="7"
{!../../docs_src/templates/templates/item.html!}
```
### Значения контекста шаблона { #template-context-values }
В HTML, который содержит:
{% raw %}
```jinja
Item ID: {{ id }}
```
{% endraw %}
...будет показан `id`, взятый из переданного вами «context» `dict`:
```Python
{"id": id}
```
Например, для ID `42` это отрендерится как:
```html
Item ID: 42
```
### Аргументы `url_for` в шаблоне { #template-url-for-arguments }
Вы также можете использовать `url_for()` внутри шаблона — он принимает те же аргументы, что использовались бы вашей *функцией-обработчиком пути*.
Таким образом, фрагмент:
{% raw %}
```jinja
```
{% endraw %}
...сгенерирует ссылку на тот же URL, который обрабатывается *функцией-обработчиком пути* `read_item(id=id)`.
Например, для ID `42` это отрендерится как:
```html
```
## Шаблоны и статические файлы { #templates-and-static-files }
Вы также можете использовать `url_for()` внутри шаблона, например, с `StaticFiles`, которые вы монтировали с `name="static"`.
```jinja hl_lines="4"
{!../../docs_src/templates/templates/item.html!}
```
В этом примере будет создана ссылка на CSS-файл `static/styles.css` с помощью:
```CSS hl_lines="4"
{!../../docs_src/templates/static/styles.css!}
```
И, так как вы используете `StaticFiles`, этот CSS-файл будет автоматически «отдаваться» вашим приложением **FastAPI** по URL `/static/styles.css`.
## Подробнее { #more-details }
Больше подробностей, включая то, как тестировать шаблоны, смотрите в документации Starlette по шаблонам.