Рекомендуемая в документации Flask и Django структура файлов разделяет по разным директориям HTML-шаблоны от связанных с ними статических файлов (CSS, JavaScript и графические файлы).
Это разделение упрощает конфигурацию HTTP-сервера:
- статические файлы должны раздаваться HTTP-сервером напрямую;
- HTML-шаблоны обрабатываются Python-приложением, результат идёт через WSGI-сервер к http-серверу.
В Django для упрощения раздачи статистики из коробки доступна команда collectstatic, собирающая все статические файлы в одной директории.
Так что, для раздачи статики через тот же NGINX можно будет указать один конкретный путь:
location /static/ {
alias /home/project/project-env/project/static/;
}
Но, в разработке кажется выгодным объединять static и templates в одну директорию, чтобы держать связанные HTML, CSS и JS файлы как можно ближе, реализуя иерархию более-менее независимых компонентов (блоки в методологии БЭМ).
Организовать полноценную иерархию компонентов проще с шаблонизатором Jinja2. В сравнении с шаблонизатором Django, в Jinja2 больше механизмов для расширения и включения шаблонов, изоляции пространств имён и контекста.
При этом, как я понимаю, NGINX может напрямую раздавать файлы с определённым расширением (*.js, *.css и так далее). А значит многоуровневую компонентную файловую структуру можно оставить и в production.
Однако, я не смог найти никакой информации о преимуществах и недостатках объединения static- и templates-директорий.
Собственно вопрос, в Django/Flask в чём преимущества и недостатки:
- классического подхода с разделением фронтенда на static и templates
- и БЭМ-подобного подхода с разделением фронтенда на более независимые компоненты, причём более-менее штатными для Django/Flask средствами?
P.S. Речь не о разделении всего проекта на applications/blueprints, а о структуре front-end внутри этих applications/blueprints.