JavaRush /Курсы /Модуль 3: Django /Организация папки templates

Организация папки templates

Модуль 3: Django
5 уровень , 7 лекция
Открыта

В прошлых лекциях мы говорили о Django Template Language (DTL), контексте и способах их передачи в шаблоны через представления. Мы также освоили работу с тегами, фильтрами, а главное — научились использовать наследование шаблонов для построения базовых структур, таких как base.html. Следующим логичным шагом станет понимание, как организовать шаблоны на уровне файловой системы вашего проекта.

Почему организация шаблонов играет важную роль?

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

Правильная организация шаблонов:

  1. Упрощает чтение и сопровождение проекта.
  2. Делает структуру предсказуемой (новым разработчикам проще влиться).
  3. Позволяет легко переиспользовать компоненты.

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

По умолчанию, Django ищет шаблоны в папке templates корня проекта или внутри приложений, если они настроены правильно. Но чтобы все работало гладко, важно понимать, как Django ищет шаблоны.

Поиск шаблонов: механизм В settings.py у нас есть параметр TEMPLATES. В нем ключ DIRS определяет список путей, где Django будет искать шаблоны. Например:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # Основная директория для шаблонов
        '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',
            ],
        },
    },
]

Параметр APP_DIRS=True говорит Django искать шаблоны внутри каждого приложения, в папке app_name/templates/app_name/. Таким образом, вы можете организовать шаблоны как на уровне проекта, так и на уровне приложений.

Основные подходы к организации папок templates

1. Глобальная папка templates для всего проекта

Если у вас небольшой проект, централизованная папка templates в корне может быть удобной. Все шаблоны хранятся в одном месте, а структура папок внутри организуется на ваше усмотрение.

Пример структуры:

project/
|-- templates/
|   |-- base.html
|   |-- home/
|   |   |-- index.html
|   |   |-- about.html
|   |-- blog/
|       |-- blog_list.html
|       |-- blog_detail.html

Здесь:

  • Файл base.html используется как базовый шаблон.
  • Папки home и blog содержат шаблоны для конкретных частей сайта.

Плюсы глобального подхода:

  • Простота в настройке.
  • Хорошо подходит для небольших проектов.

Минусы:

  • При увеличении числа приложений сложно поддерживать порядок (будет слишком много файлов).

2. Локальные шаблоны для каждого приложения

Для большего контроля и изоляции шаблонов рекомендуется хранить их внутри приложений.

Пример структуры:

project/
|-- app_home/
|   |-- templates/
|       |-- app_home/
|           |-- index.html
|           |-- about.html
|-- app_blog/
|   |-- templates/
|       |-- app_blog/
|           |-- blog_list.html
|           |-- blog_detail.html

В этом подходе каждый шаблон находится внутри соответствующего приложения, и Django будет искать их автоматически благодаря APP_DIRS=True.

Чтобы подключить шаблон, вы указываете путь от папки templates внутри приложения:

{% extends "app_home/base.html" %}

Плюсы локального подхода:

  • Более логичное разделение кода между приложениями.
  • Упрощение поддержки крупных проектов.

Минусы:

  • Повторение базовых файлов, таких как base.html, если не используется явное наследование шаблонов.

3. Смешанный подход

На практике часто используется комбинация глобального и локального подходов:

  • Глобальная папка templates содержит общие шаблоны (например, base.html, компоненты хедера/футера).
  • Приложения имеют собственные папки с шаблонами для специфических страниц.

Пример структуры:

project/
|-- templates/
|   |-- base.html
|   |-- navigation.html
|   |-- footer.html
|-- app_home/
|   |-- templates/
|       |-- app_home/
|           |-- index.html
|           |-- about.html
|-- app_blog/
|   |-- templates/
|       |-- app_blog/
|           |-- blog_list.html
|           |-- blog_detail.html

Настройка пути к шаблонам

Чтобы Django мог находить шаблоны, нужно добавить правильный путь в DIRS:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # Указываем папку с глобальными шаблонами
        'APP_DIRS': True,  # Шаблоны в приложениях
        ...
    }
]

Использование подкаталогов

Внутри папки templates часто создаются подкаталоги для группировки файлов. Это может быть:

  • По названию приложения (blog, shop).
  • По смыслу (например, partials, emails).

Пример настройки TEMPLATES, если папка шаблонов называется project_templates:

TEMPLATES = [
    {
        'DIRS': [BASE_DIR / 'project_templates'],
        ...
    }
]

Примеры организации шаблонов в реальных проектах

Пример 1: общие и уникальные шаблоны

project/
|-- templates/
|   |-- base.html
|   |-- navigation.html
|-- blog/
|   |-- templates/
|       |-- blog/
|           |-- list.html
|           |-- detail.html
|-- shop/
|   |-- templates/
|       |-- shop/
|           |-- product_list.html
|           |-- cart.html
  • base.html — общий базовый шаблон.
  • Навигация, футер или другие общие части выносятся в глобальный каталог.
  • Шаблоны, связанные только с blog или shop, располагаются внутри соответствующего приложения.

Пример 2: Части страницы через include

Часто шаблоны делаются "компонентными" — одна часть страницы, например, футер, вставляется через {% include %}.

project/
|-- templates/
|   |-- base.html
|   |-- partials/
|       |-- header.html
|       |-- footer.html

Внутри base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    {% include 'partials/header.html' %}
</head>
<body>
    {% block content %}
    {% endblock %}
    {% include 'partials/footer.html' %}
</body>
</html>

Типичные ошибки при работе с шаблонами

Многие новички сталкиваются с проблемами:

  • Файл шаблона не найден. Например, вы обращаетесь к blog_list.html, но забыли указать путь в стиле blog/blog_list.html.
  • Плохая структура папок. Если шаблоны хранятся беспорядочно, в итоге приходится тратить больше времени на их поиск и управление.
  • Дублирование базовых шаблонов. Каждый файл начинается с одинакового HTML-кода без использования наследования.

Чтобы избежать этих ошибок, придерживайтесь логичной структуры папок и используйте наследование base.html.

Теперь, организовав свои папки и файлы, вы будете готовы к созданию больших проектов с ясной и понятной структурой. Вам останется только наслаждаться процессом написания красивых веб-страниц!

1
Задача
Модуль 3: Django, 5 уровень, 7 лекция
Недоступна
Использование разделённых шаблонов
Использование разделённых шаблонов
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ