我正在使用 Django 1.2 pre-alpha 和 Python 2.4。是的,我知道,但我坚持下去。我们目前无法升级,无论如何我怀疑这就是答案。
我有两个模板标签库,foo
and bar
。然而,foo
也是一个顶级包的名字,而且恰好是bar
:
foo-1.2.3/
foo/
conf/
settings.py
templatetags/
bar.py
bar-4.5/
somepackage/
templatetags/
foo.py
标签库bar.py
包含这样一行:
from foo.conf import settings
...你会期望它加载foo-1.2.3/foo/conf/settings.py
.
But no:
TemplateSyntaxError:“bar”不是有效的标签库:无法从 django.templatetags.bar 加载模板库,没有名为 conf 的模块
不幸的是,Django 执行一点魔法并将所有模板标签库绑定到django.templatetags.*
. Thus, bar
正在导入为django.templatetags.bar
,当它调用时from foo.conf import settings
它最终导入bar-4.5/somepackage/templatetags/foo.py
. Ugh!
您有任何想法如何解决这个问题吗?
我在导入之前设置了一个断点,并且我已经确认foo-1.2.3
是在开始时sys.path
,但是import
仍然发现关键字错误foo
.
如果有帮助的话,请注意我可以修改foo-1.2.3
包(因为它已经在本地签入并且正在逐步淘汰),但我拒绝修改bar-4.5
包(因为它是一个开源包并且已在系统范围内安装)。
经过几个小时的黑客攻击,这成功了。
原始代码:
from foo.conf import settings
新代码:
foo = __import__('foo')
conf = __import__('foo.conf').conf
settings = __import__('foo.conf.settings').conf.settings
(我可能不需要第二行。)
Ewww.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)