Co Cię powstrzymuje myproduct.myproduct
? Aby to osiągnąć, musisz z grubsza to zrobić:
django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py
i tak dalej. Czy pomogłoby to, gdybym powiedział, views.py
że nie trzeba dzwonić views.py
? Pod warunkiem, że możesz nazwać na ścieżce Pythona funkcję (zwykle pakiet.package.views.function_name), zostanie ona obsłużona. Proste. Wszystkie te „projekty” / „aplikacje” to tylko pakiety Pythona.
Jak masz to zrobić? A raczej, jak mogę to zrobić? Dobrze, jeśli tworzysz znaczący kawałek funkcjonalności wielokrotnego użytku, jak mówią, edytor znaczników, to podczas tworzenia „aplikacji najwyższego poziomu”, które mogą zawierać widgets.py
, fields.py
, context_processors.py
etc - wszystko może chcesz importować.
Podobnie, jeśli możesz stworzyć coś w rodzaju bloga w formacie, który jest dość ogólny podczas instalacji, możesz zawinąć go w aplikację, z własnym szablonem, folderem zawartości statycznej itp., I skonfigurować instancję projektu django, aby z niego korzystać zawartość aplikacji.
Nie ma twardych i szybkich zasad mówiących, że musisz to zrobić, ale jest to jeden z celów ram. Fakt, że wszystko, łącznie z szablonami, pozwala na dołączenie z jakiejś wspólnej bazy, oznacza, że Twój blog powinien dobrze pasować do każdej innej konfiguracji, po prostu dbając o własną część.
Jednak aby odpowiedzieć na twoje aktualne obawy, tak, nic nie mówi, że nie możesz pracować z folderem projektu najwyższego poziomu. To właśnie robią aplikacje i możesz to zrobić, jeśli naprawdę chcesz. Nie robię tego jednak z kilku powodów:
- Domyślna konfiguracja Django tego nie robi.
- Często chcę utworzyć główną aplikację, więc tworzę jedną, zwykle nazywaną
website
. Jednak w późniejszym czasie mógłbym chcieć opracować oryginalną funkcjonalność tylko dla tej witryny. Aby uczynić go usuwalnym (niezależnie od tego, czy kiedykolwiek to robię), zwykle tworzę osobny katalog. Oznacza to również, że mogę upuścić tę funkcjonalność po prostu odłączając ten pakiet od konfiguracji i usuwając folder, zamiast skomplikowanego usuwania odpowiednich adresów URL z globalnego folderu urls.py.
- Bardzo często, nawet gdy chcę uczynić coś niezależnym, musi on gdzieś żyć, a ja będę się nim opiekować / uniezależnić. Zasadniczo powyższy przypadek, ale dla rzeczy zamierzam zrobić rodzajowy.
- Mój folder najwyższego poziomu często zawiera kilka innych rzeczy, w tym między innymi skrypty wsgi, skrypty SQL itp.
- Rozszerzenia zarządzania django opierają się na podkatalogach. Dlatego sensowne jest odpowiednie nazwanie pakietów.
Krótko mówiąc, powód, dla którego istnieje konwencja, jest taki sam jak każda inna konwencja - pomaga to innym osobom pracującym z twoim projektem. Jeśli widzę fields.py
, od razu oczekuję, że kod podklasuje pole django, podczas gdy widzę inputtypes.py
, że nie jestem tak jasny, co to znaczy, bez patrzenia na to.