2010-10-16 26 views
25

Tôi có một dự án Django, giả sử "project1". cấu trúc thư mục điển hình cho các ứng dụng là:Làm thế nào để giữ tất cả các ứng dụng django của tôi trong thư mục cụ thể

/project1/ 
     /app1/ 
     /app2/ 
     ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Tôi nên làm gì nếu tôi muốn giữ tất cả các ứng dụng của tôi trong một số thư mục riêng biệt, 'ứng dụng' ví dụ? Vì vậy, cấu trúc đó nên trông giống như sau:

/project/ 
     apps/ 
       app1/ 
       app2/ 
       ... 
     __init__.py 
     manage.py 
     settings.py 
     urls.py 

Trả lời

36

Bạn có thể thêm thư mục apps của bạn để con đường python của bạn bằng cách chèn sau trong settings.py của bạn:

import os 
import sys 

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

Sau đó, bạn có thể sử dụng tất cả các ứng dụng trong thư mục này chỉ trong cùng một cách như họ ở gốc của dự án của bạn!

+2

Nếu bạn hỏi tôi, điều này dẫn đến sự nhầm lẫn. –

+1

Điều này dẫn đến xung đột khi chạy thử nghiệm. –

12

Bạn có thể làm điều này rất dễ dàng, nhưng bạn cần phải thay đổi settings.py trông như thế này:

INSTALLED_APPS = (
    'apps.app1', 
    'apps.app2', 
    # ... 
) 

urls.py của bạn trông như thế này:

urlpatterns = patterns('', 
    (r'^app1/',include('apps.app1')),  
    (r'^app2/',include('apps.app2')),  
) 

.. và sửa đổi bất kỳ import s để trỏ đến vị trí ứng dụng

+0

Tính năng này có hoạt động tốt với nhân tố thử nghiệm không? – yellottyellott

+4

Tôi khuyên bạn không nên sử dụng phương pháp này vì có thể dẫn đến các ứng dụng khác không thể tham chiếu ứng dụng của riêng bạn và sẽ yêu cầu bạn thay đổi tất cả các lần nhập trong ứng dụng để trỏ đến thư mục mới. Tôi nghĩ đúng cách là trong câu trả lời của [Bernhard Vallant] (http://stackoverflow.com/a/3948821/1057102). – sleblanc

+0

Mẫu này được theo sau trong dự án [django-oscar] (https://github.com/django-oscar/django-oscar). – Dineshs91

1

Nếu bạn đang sử dụng virtualenv/virtualenvwrapper (và bạn sẽ có), bạn có thể sử dụng bao gồm add2virtualenv lệnh để tăng thêm đường python của bạn:

mkdir apps 
cd apps 
pwd 
[/path/to/apps/dir] 

Sao chép con đường đó vào clipboard, sau đó:

add2virtualenv /path/to/apps/dir 
2

Cách bạn sử dụng biến số BASE_DIR đã có trong settings.py.

Chỉ cần thêm những điều sau đây:

import sys 
sys.path.insert(0, os.path.join('BASE_DIR', 'apps')) 

Hope this helps.

0

Chỉ cần thêm __init__.py (tổng số 4 dấu gạch dưới) trong thư mục ứng dụng của bạn. Bây giờ bạn chỉ có thể thực hiện

urlpatterns = [ 
     path('polls/',include('apps.polls.urls')), 
     path('admin/', admin.site.urls) 
] 
Các vấn đề liên quan