Задать вопрос
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer

Имеет ли смысл объединение templates- и static-директорий для реализации компонентного подхода во front-end Django- и Flask-проектов?

Рекомендуемая в документации 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 в чём преимущества и недостатки:
  1. классического подхода с разделением фронтенда на static и templates
  2. и БЭМ-подобного подхода с разделением фронтенда на более независимые компоненты, причём более-менее штатными для Django/Flask средствами?


P.S. Речь не о разделении всего проекта на applications/blueprints, а о структуре front-end внутри этих applications/blueprints.
  • Вопрос задан
  • 835 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
В этом случае лучше использовать библиотеку Flask-Themes, чтобы указать расположение статики и шаблонов вне модуля не засорять его.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы