# Шаблони { #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` і словник «контекст» з парами ключ-значення, які будуть використані всередині шаблону 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`, взятий із «контексту» `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 щодо шаблонів.