我的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读取文件进行自我配置,然后确认一切正常,然后再导入最终时间并实际使用它?

+1

非常感谢您的分析和确认。我必须在几天内回到这个问题。关于import_count只是一个想法:我认为它应该总是返回1,如果你分配0,然后加1。可选方法:'try:import_count + = 1,除了NameError:import_count = 0'。再次感谢您帮助我了解settings.py ... – jammon 2011-06-29 18:58:08