2010-03-25 8 views
6

Ai đó có thể cho tôi một con trỏ về lý do tại sao tôi cần thêm đường dẫn gốc dự án của tôi vào đường dẫn python cũng như ứng dụng trong tệp WSGI của tôi?Django sys.path.append cho dự án * và * ứng dụng cần thiết theo WSGI

Cơ sở dự án được gọi là 'djapp', ứng dụng được gọi là 'myapp'.

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') 
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../djapp') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'djapp.settings' 

Nếu tôi bỏ qua dòng "/../djapp/" nhật ký cho biết 'myapp' không thể nhập được, mặc dù 'djapp.settings' là. (đã xác thực 'djapp' đã được nhập)

Nó al chạy đúng với lệnh ./manage.py. có một __init__ trong thư mục dự án.

Đối với xét nghiệm sake, tôi thấy vấn đề tương tự sử dụng addsitedir:

site.addsitedir('/home/user/web/project/') 
site.addsitedir('/home/user/web/project/djapp') 

Trả lời

4

Kể từ djapp (django thư mục dự án) là trong một thư mục mẹ mà cũng thuộc về việc triển khai tôi đổi tên thư mục djapp đơn giản chỉ để project. Sau đó, mã này là luôn đúng:

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') 
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../project') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 

hoàn chỉnh bố trí thư mục con:

host.example.com\ 
    etc\ 
    bin\ 
    project\ 
    logs\ 

Và những gì có bạn. Dự án theo cách này luôn có thể được gọi là dự án :)

Hy vọng điều đó sẽ hữu ích.

GrtzG

3

đang Có lẽ bạn đã có trong dự án của bạn được làm from myapp import foo.

Hai lựa chọn:

  • sự thay đổi đó để from djapp.myapp import foo, mà không được khuyến khích vì nó cản trở tính di động;
  • chỉ thêm djapp trong WSGI của bạn và đặt DJANGO_SETTINGS_MODULE thành chỉ 'settings'.
+0

Xin chào Daniel, thanx cho phản hồi. Đã thử tùy chọn thứ 2, nhưng sau đó nó phàn nàn về việc nhập 'djapp.urls' – GerardJP