Последнее время мне всё более и более странным (я бы даже сказал “недальновидным”) кажется решение авторов оригинального
туториала по Джанге показывать именно такой формат расположения файлов в джанге (и уж тем более то, какой
sys.path
они там используют): в туториале все файлики, созданные с помощью startproject
, лежат в одной директории
вместе с приложениями. Соответственно, все импорты выглядят как from someproject.someapp import views
.
Мне понятно, откуда ноги растут - на деле у них все приложения лежат в sys.path
, и потому импортируют они оттуда как
from someapp import views
, а проект - это лишь настройки да корневой конфиг урлов. Тогда можно родительскую для всех
проектов директорию положить в sys.path, и менять только DJANGO_SETTINGS_MODULE
. Но в любом случае одним
интерпретатором питона для двух джанговских проектов не обойдёшься (спасибо этому самому DJANGO_SETTINGS_MODULE
), а
способность к лёгкому созданию дистрибутива и его распространению страдает порядочно (что особенно важно для
опенсорсовых проектов).
Поэтому мне значительно больше нравится другой подход к делу, который я применяю во всех своих проектах, в том числе и в Byteflow:
project/
apps/ # собственно приложения
template/ # шаблоны
static/ # статические файлы - картинки оформления, стили, JS
media/ # файлики, загруженные пользователями, не версионируется
locale/ # переводы
compat/ # тут библиотеки типа django-atom
manage.py # файлы, относящиеся к описанию проекта
settings.py
urls.py
...
При этом в sys.path
добавляется сама директория проекта, DJANGO_SETTINGS_MODULE
становится равен settings
, а в
settings.py
двумя строками кода в sys.path
добавляется и apps/
с compat/
1. В результате все импорты простые и не
содержат имени проекта (что тупо хотя бы потому, что я не могу склонировать проект рядом и поэкспериментировать в нём
из-за того, что будут проблемы с импортами), а проект становится достаточно независимой вещью, которая для
разворачивания на каком-то сервере требует только Джангу и библиотеки, которые достаточно распространённые и/или
большие для того, чтобы не включать их в проект.
-
Как это делается, можно увидеть в
settings.py
у Byteflow. ↩︎