Структура шаблонов в Django

Существует два основных способа организации структуры шаблонов Django: на уровне приложений и пользовательский, на уровне проекта, который указывается в setting.py.

На уровне приложений

По умолчанию загрузчик шаблонов Django ищет в каждом приложении каталог templates (за это отвечает параметр APP_DIRS в настройках проекта). Для предотвращения неразберихи в пространстве имен также рекомендуется создавать в этом каталоге еще вложенный каталог, названный также как и приложение.

Например, у нас есть проект example_project с приложением pages и файлом шаблона home.html, тогда правильная структура будет выглядеть так: в приложении pages мы создаем каталог templates, а в нем каталог pages, в котором и разместим файл home.html:

├── example_project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
|   └── pages
|      ├── __init__.py
│      ├── admin.py
│      ├── apps.py
│      ├── models.py
│      ├── tests.py
│      └── views.py
|      ├── templates
|          ├── pages
|              ├── home.html
└── manage.py

Уровень проекта

В процессе разрастания проекта Django часто предпочтительным способом будет хранть все шаблоны в одном месте, чем распределять их по всем приложениям. Сделать это можно настройкой в settings.py.

Обновим параметр 'DIRS' в параметре TEMPLATES, где укажем в дополнение к поиску шаблонов в каталогах приложений, поиск шаблонов в отдельном каталоге на уровне проекта.

# settings.py
TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

Теперь создадим каталог templates в каталоге проекта. Теперь структура нашего проекта быдет выглядеть так:

├── example_project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
|   └── pages
|      ├── __init__.py
│      ├── admin.py
│      ├── apps.py
│      ├── models.py
│      ├── tests.py
│      └── views.py
├── templates
    ├── home.html
└── manage.py

Заключение

Запомните, что загрузчик шаблонов сначала ищет их в приложениях, а уже затем, если настроен DIRS, в каталоге templates проекта. Это не совсем "правильный" путь организации шаблонов, но большинство разработчиков, включая и автора, предпочитают использование шаблонов на уровне проекта.

От себя хочу добавить, что использовать общий каталог можно для шаблонов, которые не относятся к конкретным приложениям или используются многими приложениями в проекте. Например, базовый шалон base.html, который потом наследуют другие шаблоны.

Источник: https://wsvincent.com/django-tips-template-structure/

Вернуться на верх