2009-07-05 29 views
8

Tôi có một dự án Django có vẻ hoạt động khá tốt với settings.py, cũng đã nhập một local_settings.py mà không gặp sự cố.Sự cố khi nhập tệp trong Django settings.py

bây giờ tôi đã thêm các dòng sau vào cuối của các thiết lập file:

try: 
    from extras import * 
except ImportError, e: 
    print "import extras failed :: " + `e` 

extras.py là một tập tin của thông tin cấu hình thêm ngồi trong cùng thư mục với settings.py và local_settings.py Tuy nhiên, tôi là bây giờ nhận được:

import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',) 

này có vẻ là do tôi cố gắng để

from django.contrib.auth.models import User,UserManager 
from django.db import models 

trong tệp extras.py đó.

Bất kỳ ai có ý tưởng nào?

cổ vũ

Trả lời

17

Thông thường, có một dòng như

from django.db import models 

trong settings.pysẽ dẫn đến một sự phụ thuộc tròn. Điều này gây ra một lỗi nhập khẩu, được báo cáo hơi khác nhau trong các phiên bản khác nhau của Django. Ví dụ: nếu tôi thêm dòng đó vào thiết lập Django đang hoạt động và gọi "manage.py shell", tôi nhận được:

Error: Can't find the file 'settings.py' in the directory containing './manage.py'. It appears you've customized things. You'll have to run django-admin.py, passing it your settings module. (If the file settings.py does indeed exist, it's causing an ImportError somehow.)

Nếu tôi xóa dòng đó, mọi thứ đều ổn.

Lý do là máy móc tải mô hình của Django (nằm trong gói django.db.models) nhập settings.py, đọc INSTALLED_APPS để xem ứng dụng nào sẽ được cài đặt và sau đó tải các ứng dụng đó. (Bạn có thể xác nhận điều này bằng cách thêm một tuyên bố in để __init__.py cho một trong những ứng dụng được cài đặt của bạn.)

Nếu bạn cố gắng nhập django.db thứ trong settings.py, mà sẽ dẫn đến một sự phụ thuộc nhập khẩu tròn và một thông báo lỗi ImportError -related.

Một giải pháp thay thế là di chuyển chức năng yêu cầu nhập có vấn đề (và tự nhập) vào ứng dụng.

+2

+1 Quy tắc chung không bao giờ được nhập bất kỳ thứ gì từ Django trong settings.py. –

+0

Xem tại đây, để biết chi tiết: http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html – dhill

3

Vì vậy, cách DJANGO_SETTINGS_MODULE đặt trong môi trường của bạn như thế nào? Có thể là, hoặc kết quả của việc nhập các cài đặt ngầm định mà các hàng nhập lồng nhau khác của bạn đang gây ra trong khi cài đặt đang được nhập, "phụ thuộc vòng tròn" có thể có một số hiệu ứng khó chịu (mặc dù tôi không tin rằng nó sẽ có cụ thể bạn đang quan sát, vì vậy tôi nghiêng về phía giả thuyết đầu tiên).

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