【发布时间】:2011-08-03 18:49:22
【问题描述】:
我正在尝试自定义应用程序如何集成到通用 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 名称添加到外部命名空间中怎么办?在myapp_settings 中添加NEW_SETTING = True 并在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 上下文,因为我也很欣赏不同的解决方案来达到拆分设置目标。
【问题讨论】:
标签: python django module namespaces settings