2012-12-22 13 views
7

Uczę się Django. Moje doświadczenie pochodzi z PHP i Java, a doświadczenie z wykorzystaniem szkieletów kontrolera Model View. Zawsze miałem osobny plik dla każdego z moich widoków, modeli i szablonów - ale samouczek Django wspomina tylko o jednym views.py i models.py.Dobra praktyka: porządkowanie views.py w aplikacjach Django

To wydaje się być w porządku, jeśli masz małą aplikację - a co jeśli chcesz uporządkować swoje widoki i modele według swoich celów? Na przykład widok Projekty i widok Kamienie milowe. Mam nadzieję, że nie będzie trzeba utworzyć inny pakiet Pythona (APP) dla każdego modułu Widok:

python manage.py startapp projects

python manage.py startapp milestones

mogę założyć, że można mieć milestones.py oraz projekty. py dla twoich widoków i modeli zamiast ogólnych views.py i models.py? Następnie modele można zaimportować w razie potrzeby do widoków i żądań kierowanych do określonych widoków?

Odpowiedz

17

Nie ma problemu z posiadaniem wielu plików zawierających widoki i modele.

W rzeczywistości wystarczy moduł views i moduł models. W pythonie moduł jest plikiem kończącym się .py lub folderem zawierającym plik __init__.py.

Aplikacja może wyglądać następująco:

app_folder 
    - views 
    | - __init__.py 
    | - some_view.py 
    | - some_other_view.py 
    - models 
    | - __init__.py 
    | - some_model.py 
    | - some_other_model.py 

models/__init__.py powinien wyglądać podobnie do kodu poniżej (dla submodułów zostać przeanalizowane przez Django w ogóle).

from some_model import SomeModel 
from some_other_model import SomeOtherModel 

Jedyną różnicą ze wspólnego podejścia jest mieć app_label zdefiniowany w modelach:

class SomeModel(models.Model): 
    class Meta: 
     app_label = 'app_folder' 

sprawdzić powiązane doc entry.

Aktualizacja:

Docs wersja rozwojowa powiedzieć, że nie będzie musiał określić app_label w tym przypadku żadnego więcej zaczynające 1,7 wydaniu.

Posłowie:

W rzeczywistości, jeśli chcesz zrobić to zwykle oznacza, że ​​aplikacja jest zbyt duża i należy podzielić ją na kilka aplikacji. Większość osób, które przychodzą do django, obawia się posiadania wielu małych aplikacji. Im więcej aplikacji stron trzecich czytasz, tym więcej aplikacji zdajesz sobie sprawę z rozwiązania jednego i tylko jednego problemu. W twoim przykładzie posiadanie aplikacji milestones wydaje się być całkowicie zgodne z prawem.