2

Django1.2プレアルファ版とPython2.4を使用しています。ええ、私は知っていますが、私はそれに固執しています。現時点ではアップグレードできません。とにかくそれが答えだとは思えません。

2つのテンプレートタグライブラリがfooあり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

しかし、いいえ:

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

(おそらく2行目は必要ありません。)

Ewww。

于 2010-12-23T22:46:07.180 に答える