S.L*_*ott -4 python django configuration
我有几个站点,每个站点都有一个不同的设置文件 - 并且名称不同.所有变体设置都有花卉主题.我们必须将网站分开.
C:\Proj-Carnation> echo %DJANGO_SETTINGS_MODULE%
path.to.settings_carnation_win32
Run Code Online (Sandbox Code Playgroud)
我们有许多测试程序不使用内置django-admin.py test命令,因为它们是由Django前端启动的大型批处理作业,并使用Django ORM.我们需要使用该django.db.connection.creation.create_test_db()方法来创建一个新的测试数据库.
我们一直在使用这个测试程序.目前,它已停止工作.我们已经进行了大量的代码结构更改,升级到Django 1.1.1和Python 2.6.所有都是可能的罪魁祸首.
当我运行Python时,我看到了这一点.
C:\Proj-Carnation> python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.conf import settings
>>> settings.DATABASE_ENGINE
INSDIE django.db.__init__, settings.DATABASE_ENGINE=''
'sqlite3'
>>> import django.db
>>> django.db.connection
<django.db.backends.dummy.base.DatabaseWrapper object at 0x00EE88B0>
Run Code Online (Sandbox Code Playgroud)
在导入期间django.db,显然没有设置设置.我添加了一个打印声明(带有拼写错误的"INSIDE")django.db.未设置设置.
最终settings.DATABASE_ENGINE成为'sqlite3'.在某种程度上,这种"最终"行为是预期的:该settings模块使用惰性加载器技术.
问题是:连接 - 由不完整的设置构建 - 是dummy数据库后端.然而,最终的设置显示了引擎'sqlite3'.
在另一个项目("根"项目)中,没有问题.事情很完美.数据库设置创建正确的sqlite3后端实例.
那么,有什么不同?我很难过.这是环境设置或物理目录树是最重要的潜在问题.
在非工作中C:\Proj-Carnation,PYTHONPATH是C:\Proj-Carnation;C:\Proj-Root;C:\This;C:\That.
在工作根项目中C:\Proj-Carnation,PYTHONPATH是C:\Proj-Root;C:\This;C:\That.
我在"Carnation"项目中寻找隐藏了根项目中某些内容的东西吗?遗憾的是,Carnation项目只有一些文件,它们位于一个包(local)中,以确保它们的名称与根项目不同.
在版本1.1.1中是否有一些Django初始化有所不同?例如,django.confPython 2.6和Django 1.1.1中是否存在某些问题?
是否存在一些我忽略的相对进口问题?
找到了.
当您的设置模块位于包中时,该包的顶级__init__.py成员无法导入任何类型的任何Django材质.
如果__init__.py包含您的设置的顶级具有Django导入,则Django导入将(可能)在创建设置之前使用默认设置.
由于Django中的一些东西(比如数据库连接)是单例,因此在读取设置时创建的东西是唯一可以存在的东西.
不要在__init__.py包含设置模块的包中放入任何东西.
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |