Django My settings.py被调用了4次-知道为什么吗?
启动本地开发服务器(Django My settings.py被调用了4次-知道为什么吗?,django,Django,启动本地开发服务器(/manage runserver)时,settings.py会运行四次。我注意到了这一点,因为错误/调试消息被打印了四次 你知道怎么会这样吗?我甚至不知道从哪里开始找。这对我来说很重要,因为我正在与Sentry的设置斗争,它不会以现在的安装方式报告网站的任何错误 更新: 我检查了导入模块的导入设置,我的应用中没有设置 然后我补充说 import traceback; traceback.print_stack(); print 到settings.py。结果是: File
/manage runserver
)时,settings.py会运行四次。我注意到了这一点,因为错误/调试消息被打印了四次
你知道怎么会这样吗?我甚至不知道从哪里开始找。这对我来说很重要,因为我正在与Sentry的设置斗争,它不会以现在的安装方式报告网站的任何错误
更新:我检查了导入模块的导入设置,我的应用中没有设置 然后我补充说
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
文件“/manage.py”,第5行,在
导入设置#假定位于同一目录中。
文件“(…)/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第12行,在
执行\u管理器(设置)
(...)
文件“(…)/site packages/django/conf/_init__.py”,第73行,在_init中__
mod=importlib.import\u模块(自我设置\u模块)
文件“(…)/site packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
文件“(…)/myapp/。/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第5行,在
导入设置#假定位于同一目录中。
文件“(…)/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
文件“/manage.py”,第12行,在
执行\u管理器(设置)
(...)
文件“(…)/site packages/django/conf/_init__.py”,第73行,在_init中__
mod=importlib.import\u模块(自我设置\u模块)
文件“(…)/site packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
文件“(…)/myapp/。/myapp/settings.py”,第4行,在
导入回溯;traceback.print_stack();打印
这是故意的行为吗?如果没有,我如何才能找到我的错误?它是通过
sys.path
中的不同条目访问的。切勿尝试自己导入设置
;导入django.conf.settings
。这种行为实际上发生在全新的django 1.3项目中。第一次启动开发服务器时,它会执行四次导入操作:
$ 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
如果在开发服务器运行的情况下编辑文件,它只执行两次导入操作:
$ 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.
我不知道它为什么这样做,或者它是否在非开发服务器上这样做。但这种行为似乎是正常的
如果在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...
因此,在最后一次导入并实际使用该文件之前,它可能只是读取该文件以进行自我配置,并验证一切正常?非常感谢您的分析和确认。我必须在几天后再讨论这个问题。关于导入计数的一个想法是:我认为如果分配0,然后添加1,它应该总是返回1。替代方法:
尝试:导入计数+=1,名称除外错误:导入计数=0
。再次感谢您帮助我理解设置。py。。。