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.

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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ