Расположение шаблонов и статических файлов в Django

Я планирую новый проект Django и хочу, чтобы все было правильно и прочее. Я наткнулся на вопрос о том, как организовать макет каталога проекта. К счастью, в интернете есть немало примеров хороших шаблонов проектов. И все же есть одна вещь, которую я изо всех сил пытаюсь вбить себе в голову:--1-->

это рекомендуемый способ поместить файлы шаблонов в отдельный каталог под корнем проекта, который разделен на подкаталоги приложениями. Итак, шаблоны не расположен в каталогах приложений. Это кажется мне логичным, поскольку мы хотим отделить логику приложения от логики представления. Но как насчет статических файлов? Здесь общей практикой, по-видимому, является обнаружение статических файлов в dirs приложения и загрузка их в "статический" каталог под корнем проекта во время разработки (collectstatic). И этой логики я не понимаю. Поскольку статические файлы (т. е. js, css, изображения) обычно доступны в шаблонах, а не в коде приложения, I считал бы их логикой изложения. Тогда почему они не хранятся так же, как шаблоны - каталог под корнем проекта с подкаталогами для отдельных приложений?

Я знаю, что могу хранить эти файлы, где хочу, но я думаю, что может быть веская причина, почему люди делают это таким образом. Что это за причина?

2 ответов


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

иногда это имеет смысл. Иногда это не так - это твой выбор.

например, я помещаю свой статический носитель в site_media каталог (глобальный css, глобальные изображения и т. д.), Но поместите приложение вapp/static. Например, если у меня есть Poll app, есть хороший шанс, что мои медиа необходимы только для приложения опроса шаблоны, а не Индекс моего сайта.

то же самое касается шаблонов: я ставлю свои глобальные шаблоны (base.html) в глобальном каталоге шаблонов, но конкретные шаблоны приложений входят в myapp/templates/myapp/foo.html.

наконец, она особенно имеет смысл для подключаемых приложений. Например, статические файлы django хранятся в приложении, но становятся доступными в каталоге статических файлов, даже если приложение живет где-то на вашем пути python. Ранее вам пришлось бы скопировать каталог мультимедиа или символическая ссылка на него.

приложение staticfiles действительно светит, потому что он позволяет организовать все файлы связанные с приложением в одном месте: папка приложения. collectstatic заботится об остальном, и делает все это доступно в одном месте на веб-сервере.


Я фактически помещаю шаблоны в каталог для каждого приложения, и я думаю, что это имеет смысл. У вас все еще есть разделение логического разделения, так как все остальное происходит в файлах Python.

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

именно по этой причине статический каталог должен и храниться в каталоге приложений; это позволяет очень четко организовать ресурсы на основе того, что необходимо для конкретного приложения, и именно поэтому приложение staticfiles было создано в первую очередь.