2

我正在使用 Django 1.2 pre-alpha 和 Python 2.4。是的,我知道,但我坚持下去。我们目前无法升级,无论如何我怀疑这就是答案。

我有两个模板标签库,foobar. 但是,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.

但不是:

TemplateSyntaxError:“bar”不是有效的标签库:无法从 django.templatetags.bar 加载模板库,没有名为 conf 的模块

不幸的是,Django 执行了一个小魔术并将所有模板标签库绑定到django.templatetags.*. 因此,bar被导入为django.templatetags.bar,当它调用它时,from foo.conf import settings它最终导入bar-4.5/somepackage/templatetags/foo.py. 啊!

你有任何想法如何解决这个问题吗?

我在导入之前设置了一个断点,并且我已经确认foo-1.2.3是在开头sys.path,但是import关键字仍然找到了错误的foo

如果有帮助,请注意我可以修改foo-1.2.3包(因为它已在本地签入并且正在逐步淘汰),但我拒绝修改bar-4.5包(因为它是开源包并且已在系统范围内安装)。

4

1 回答 1

1

经过几个小时的黑客攻击,这成功了。

原始代码:

from foo.conf import settings

新代码:

foo = __import__('foo')
conf = __import__('foo.conf').conf
settings = __import__('foo.conf.settings').conf.settings

(我可能不需要第二行。)

万维网。

于 2010-12-23T22:46:07.180 回答