我希望将Django系统中的settings.py
替换为实现为包含settings
的目录__init__.py
的模块。这将尝试导入以服务器命名的模块,从而允许按服务器设置。
如果我在导入之前不知道模块的名称,那么我就无法使用import
关键字,而必须使用__import__
函数。但是这不会将模块的内容添加到settings
模块。我需要相当于from MACHINE_NAME import *
。或者我需要一种方法来迭代vars(m)
(其中m
是加载的模块)并将它们添加到当前命名空间。但我无法弄清楚如何引用当前命名空间来进行分配。换句话说,我无法使用setattr(x, ..)
或修改x.__dict__
,因为我不知道对x
使用什么。
除了使用exec
之外,我现在还想不起其他许多事情。这对我来说似乎有点虚弱。我是否遗漏了Pythonic内省的一些方面,这些内容可以让我在仍在其中时操纵当前范围?
答案 0 :(得分:1)
对于基于lang设置的类似情况,我在messages.py模块中导入不同的消息,它类似于
# set values in current namespace
for name in vars(messages):
v = getattr(messages, name)
globals()[name] = v
顺便说一下你为什么要为settings.py创建一个包?无论你想做什么都可以直接在settings.py中完成?