我的settings.py被调用4次 - 任何想法为什么?
问题描述:
当我启动本地开发服务器(./manage runserver
)时,settings.py会运行四次。我注意到,因为错误/调试消息被打印了四次。我的settings.py被调用4次 - 任何想法为什么?
任何想法如何能来?我什至不知道从哪里开始寻找。这对我很重要,因为我正在努力设置Sentry,它不会像现在那样报告站点的任何错误。
更新:
我检查了导入模块import settings
,在我的应用程序中没有。
然后我说
import traceback; traceback.print_stack(); print
到settings.py中。其结果是:
File "./manage.py", line 5, in <module>
import settings # Assumed to be in the same directory.
File "(...)/myapp/settings.py", line 4, in <module>
import traceback; traceback.print_stack(); print
File "./manage.py", line 12, in <module>
execute_manager(settings)
(...)
File "(...)/site-packages/django/conf/__init__.py", line 73, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "(...)/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "(...)/myapp/../myapp/settings.py", line 4, in <module>
import traceback; traceback.print_stack(); print
File "./manage.py", line 5, in <module>
import settings # Assumed to be in the same directory.
File "(...)/myapp/settings.py", line 4, in <module>
import traceback; traceback.print_stack(); print
File "./manage.py", line 12, in <module>
execute_manager(settings)
(...)
File "(...)/site-packages/django/conf/__init__.py", line 73, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "(...)/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "(...)/myapp/../myapp/settings.py", line 4, in <module>
import traceback; traceback.print_stack(); print
这是预期的行为?如果不是,我怎么能找到我的错误?
答
它通过sys.path
中的不同条目进行访问。你不应该试图自己导入settings
;改为导入django.conf.settings
。
答
这种行为实际上发生在全新的Django 1.3项目中。当开发服务器启动的第一次,它4进口:
$ django-admin.py startproject test_project
$ cd test_project/
# settings.py
print "importing settings.py"
...
$ python manage.py runserver
importing settings.py
importing settings.py
importing settings.py
importing settings.py
Validating models...
0 errors found
Django version 1.3, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
如果编辑与开发服务器运行的文件,它只做两名外援:
$ touch settings.py
输出:
importing settings.py
importing settings.py
Validating models...
0 errors found
Django version 1.3, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
我不知道为什么这样做,或者如果这样做,对非发展小号ervers。但这种行为似乎是正常的。
如果您追踪settings.py进口,它不跨多个进口持续值:
# settings.py
import_count = 0
import_count += 1
print "import count: %d" % import_count
新鲜的开始:
$ python manage.py runserver
import count: 1
import count: 1
import count: 1
import count: 1
Validating models...
修改的文件:
import count: 1
import count: 1
Validating models...
所以也许它是ju st读取文件进行自我配置,然后确认一切正常,然后再导入最终时间并实际使用它?
非常感谢您的分析和确认。我必须在几天内回到这个问题。关于import_count只是一个想法:我认为它应该总是返回1,如果你分配0,然后加1。可选方法:'try:import_count + = 1,除了NameError:import_count = 0'。再次感谢您帮助我了解settings.py ... – jammon 2011-06-29 18:58:08