在 Django 项目中,我的目录结构如下所示:
project/
├╴module_name/
│ ├╴dbrouters.py
│ ...
...
在dbrouters.py
中,我定义了一个这样开始的类:
class CustomDBRouter(object):
current_connection = 'default'
...
这个想法是有一个数据库路由器,它设置在每个请求开始时使用的连接,然后将该连接用于所有后续数据库查询,类似于Django 文档中描述的自动数据库路由。
一切都很好,除了当我想CustomDBRouter
在脚本中导入时,我必须使用绝对路径,否则会发生一些奇怪的事情。
假设在应用程序的一部分中发生了CustomDBRouter.current_connection
更改:
import project.module_name.dbrouters.CustomDBRouter
...
CustomDBRouter.current_connection = 'alternate'
在应用程序的另一部分(假设它在上述代码之后执行),我使用相对导入来代替:
import .dbrouters.CustomDBRouter
...
print CustomDBRouter.current_connection # Outputs 'default', not 'alternate'!
我很困惑为什么会这样。CustomDBRouter
Python 是否因为我使用了不同的导入路径而创建了一个新的类对象?
加分项:有没有更好的方法来实现“全局”类属性?