Tôi đang cố gắng thiết lập tốt nhất để phát triển dự án django của mình ngay từ đầu và tôi gặp khó khăn khi phát mọi thứ để phát độc đáo trong cấu trúc thư mục. Tôi đã thiết lập virtualenv của (env trong ví dụ này) để tôi có thể triển khai một môi trường python trống sạch cho mỗi dự án django.Cấu trúc thư mục dự án django và đường dẫn python
Cấu trúc cơ bản như sau:
/env/
/bin
/db <--- Django DB
/downloads
/lib
/static <--- Where css/imgs/js etc is served from
/project/ <--- Django root
/__init__.py
/settings.py
/manage.py
/appsfolder/
/appname/
/__init__.py
/models/
/__init__.py
/somemodel.py
/urls/
/__init__.py
/someurl.py
/views/
/__init__.py
/someview.py
Đây là cách bố trí cơ bản; Tôi muốn mỗi dự án có một thư mục cho các ứng dụng, và trong mỗi ứng dụng có một thư mục riêng biệt cho các mô hình, xem và các url.
Sự cố tôi gặp phải là với đường dẫn python và cách các mô-đun được xử lý.
Trong một ứng dụng, tôi không muốn phải tham khảo dự án khi mô hình nhập khẩu tức là tôi nên sử dụng:
import appname.models.modelname
không:
import projectname.models.modelname
để giúp reusablility
Trong thư mục mô hình, tôi có: init .py
from model1 import ModelName1
from model2 import ModelName2
from model3 import ModelName3
__all__ = ['ModelName1', 'ModelName2', 'ModelName3']
Nhưng khi tôi cố gắng sử dụng một file url riêng biệt (trong /appname/urls/urlfile.py) và nhập khẩu các mô hình như sau:
from appname.models.somemodel import ModelName
tôi nhận được một "không tìm thấy mô-đun" lỗi.
khi:
from appsfolder.appname.models.somemodel import ModelName
làm việc ok
Tôi đoán này là bởi vì các ứng dụng không phải là trực tiếp trên con đường python, thay vào đó nó nằm trong một thư mục con gọi là appsfolder, nhưng tôi không chắc chắn như thế nào để khắc phục điều này, đồng thời giữ mọi thứ có thể tái sử dụng và tương đối.
Tôi biết một giải pháp là đặt tất cả ứng dụng trực tiếp trên đường dẫn python bên dưới gói trang web, nhưng tôi thực sự không thích ý tưởng này, vì tôi nghĩ rằng các ứng dụng phải nằm trong dự án nếu bạn đang sử dụng virtualenv's
này đã có ích cho tách riêng 'appviews' folder của tôi trong thư mục gốc của dự án. Họ có một cho 'mẫu', tại sao không xem, là tốt? – Droogans