Skip to content

Latest commit

 

History

History
197 lines (139 loc) · 9.38 KB

File metadata and controls

197 lines (139 loc) · 9.38 KB

Модуль 2. Урок 7. Введение в шаблоны Django: функции render() и render_to_string()


Что такое шаблоны в Django

Когда мы создаём сайты на Django, нам часто нужно не просто вернуть текст пользователю, а отобразить полноценную HTML-страницу: с заголовками, картинками, списками фильмов или сериалов. Для этого Django использует шаблоны (templates) — это обычные HTML-файлы, в которые можно вставлять данные из Python-кода.

Можно сказать, что шаблон — это “каркас страницы”, в который Django подставляет нужную информацию. Например, на странице списка фильмов мы можем заранее задать структуру таблицы или карточек, а потом просто заполнить их названиями, постерами и рейтингами из базы данных.

Если сравнить с другими технологиями:

  • в Flask шаблоны работают через Jinja2;
  • в PHP часто используются вставки <?= ?>;
  • а в Django используется собственный шаблонизатор, который позволяет писать конструкции вроде {{ movie.title }} прямо в HTML.

Где хранятся шаблоны

По умолчанию шаблоны размещаются в папке templates внутри каждого приложения. Для нашего проекта cinemahub структура будет выглядеть так:

cinemahub/
│── movies/
│   ├── templates/
│   │   ├── movies/
│   │   │   ├── index.html
│   │   │   ├── about.html

💡 Почему мы создаём папку с именем приложения (movies) внутри templates?

Потому что в проекте может быть несколько приложений (например, users, reviews, movies), и у всех могут быть свои index.html. Чтобы Django не запутался, мы храним шаблоны в подпапках, совпадающих с именем приложения.


Первое знакомство с шаблонами

Создадим наш первый шаблон — главную страницу проекта cinemahub.

Файл: movies/templates/movies/index.html

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>CinemaHub — Главная страница</title>
  </head>
  <body>
    <h1>Добро пожаловать в CinemaHub!</h1>
    <p>Здесь вы найдете лучшие фильмы и сериалы со всего мира.</p>
  </body>
</html>

Подключаем шаблон к представлению

Теперь создадим функцию во views.py, которая будет возвращать этот шаблон в браузер.

Вариант 1 — через render_to_string()

Функция render_to_string() загружает шаблон, обрабатывает его и возвращает HTML-код в виде строки. Это удобно, если вы хотите, например, отправить сгенерированный HTML по почте или сохранить в файл.

from django.http import HttpResponse
from django.template.loader import render_to_string

def index(request):
    html_code = render_to_string('movies/index.html')
    return HttpResponse(html_code)

Если вы теперь запустите сервер (python manage.py runserver) и откроете в браузере страницу http://127.0.0.1:8000/, вы увидите вашу первую страницу с приветствием.


Вариант 2 — через render()

На практике чаще используется функция render(). Она объединяет загрузку шаблона и формирование HTTP-ответа в одну строку кода:

from django.shortcuts import render

def index(request):
    return render(request, 'movies/index.html')

Это более короткий и удобный способ рендеринга шаблонов, и именно его вы будете использовать в большинстве случаев.


Как Django понимает, где искать шаблоны?

Информация о шаблонах хранится в файле settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Обрати внимание на два параметра:

  • DIRS — можно указать дополнительные пути к шаблонам (например, если они лежат вне приложения).
  • APP_DIRS=True — Django будет искать шаблоны в каждой папке templates внутри установленных приложений.

Если вы по ошибке установите APP_DIRS=False, Django просто не найдёт шаблон и выведет ошибку TemplateDoesNotExist.


Проверяем работу шаблона

  1. Запусти сервер:

    python manage.py runserver
    
  2. Открой в браузере:

    http://127.0.0.1:8000/
    
  3. Убедись, что страница отображает заголовок “Добро пожаловать в CinemaHub!” и текст под ним.

  4. Попробуй изменить текст в index.html и обнови страницу — ты увидишь изменения сразу. Django автоматически обновляет шаблоны без перезапуска сервера.


Где используются шаблоны в реальных проектах

Шаблоны — это сердце любого сайта на Django, где нужно отображать динамические данные:

  • страницы фильмов или сериалов (CinemaHub),
  • карточки товаров в интернет-магазине,
  • профили пользователей,
  • списки статей или новостей.

Позже мы научимся передавать данные из базы в шаблон и выводить, например, постеры фильмов, их описание и рейтинг. А пока — важно понять сам принцип: шаблон = HTML-структура страницы.


Практика

  1. Создай в проекте приложение movies, если оно ещё не создано.
  2. Добавь папку templates/movies/.
  3. Создай шаблон index.html с произвольным содержимым (например, приветствие и описание сайта).
  4. Настрой маршрут / на отображение этой страницы.
  5. Проверь в браузере, что всё работает.
  6. Попробуй изменить HTML и увидеть обновления без перезапуска сервера.
  7. В отдельной вьюшке по адресу /about/ создай страницу “О проекте CinemaHub”.

Вопросы

  1. Что такое шаблон в Django и зачем он нужен?
  2. В какой папке рекомендуется хранить шаблоны приложения?
  3. Для чего нужна функция render_to_string()?
  4. Чем отличается render() от render_to_string()?
  5. Что делает параметр APP_DIRS в настройках TEMPLATES?
  6. Что произойдёт, если удалить templates/movies/ или указать неверное имя файла?
  7. Как проверить, что шаблон корректно подключен?
  8. Почему лучше использовать render() вместо HttpResponse при работе с HTML-шаблонами?
  9. Какие ошибки чаще всего возникают при неправильном подключении шаблонов?
  10. Как ты думаешь, можно ли использовать шаблоны не только для HTML, но и, например, для писем?

Предыдущий урок | Следующий урок