2010-10-04 44 views
6

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

Trả lời

14

bạn có thể đặt sau đây trong settings.py của bạn để thêm bạn appsfolder-PYTHONPATH của bạn:

import os 
import sys 

PROJECT_ROOT = os.path.dirname(__file__) 
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'appsfolder')) 
+0

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

Các vấn đề liên quan