[英]Namespaces issue in settings.py
我正在嘗試自定義如何將應用程序集成到通用Django項目中。 問題在於如何將應用程序設置文件導入項目settings.py中,以便使應用程序特定設置與Django的設置完全分開。 例如:
settings.py
# Django configuration settings...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}
# a bunch of other settings
# apps overridings and new settings
from settings_myapp import *
settings_myapp.py
from settings import DATABASES
DATABASES['cms'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'cms'
}
到現在為止還挺好。 在Django設置中的運行時,DATABASE詞典反映了應用程序所做的更改。 但是,如果應用程序想要向外部名稱空間添加新名稱怎么辦? 添加NEW_SETTING = True
在myapp_settings
,並在年底一對夫婦的打印報表, settings.py
,我得到這樣的:
$ python settings.py
{'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'default'}}
Traceback (most recent call last):
File "settings.py", line 8, in <module>
from settings_myapp import *
File "~/settings_myapp.py", line 1, in <module>
from settings import DATABASES
File "~/settings.py", line 10, in <module>
print NEW_SETTING
NameError: name 'NEW_SETTING' is not defined
如何避免循環導入並完成任務?
我認為我在這里缺少一些基本的Python概念,無論如何我還是給了Django上下文,因為我也很欣賞實現拆分設置目標的不同解決方案。
這是其中一種情況,其中主settings
文件中的execfile('settings_myapp.py')
實際上可能是一個好主意,因為您真正想做的是在當前上下文中運行一些代碼。
只需從settings_myapp.py
取出import
,它就可以正常工作。
編輯:想添加execfile()
已從Python 3中刪除; 使用exec(open(fn).read())
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.