我正在尝试自定义应用程序如何集成到通用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 名称,该怎么办?在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上下文,因为我也很欣赏不同的解决方案来达到分割设置目标。
答案 0 :(得分:1)
这是主execfile('settings_myapp.py')
文件中settings
实际上可能是个好主意的情况之一,因为您实际想要做的是在当前上下文中运行一些代码。
从import
中取出settings_myapp.py
,它应该可以正常使用。
编辑:想要添加已从Python 3中删除execfile()
;使用exec(open(fn).read())
。