Расположение шаблонов и статических файлов в Django - PullRequest
7 голосов
/ 03 февраля 2012

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

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

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

Ответы [ 2 ]

9 голосов
/ 03 февраля 2012

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

Иногда это имеет смысл.Иногда это не так - это ваш вызов.

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

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

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

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

5 голосов
/ 03 февраля 2012

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

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

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

...