Структура шаблонов в 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/
Вернуться на верх