0

再利用可能なdjangoアプリ用に、カスタムテンプレートタグを作成しています。
私が定義しているタグは同じアプリ内のモデルを参照しているので、それをインポートする必要があります。

アプリコードをdjangoプロジェクトにコピーするとすべて正常に機能しますが、アプリをdistutilsでパッケージ化し、pipまたはsetup.py installを使用してインストールすると(アプリコードがサイトパッケージにコピーされるため)、使用できません。

テンプレートタグモジュールにアプリケーションモデルをインポートしようとすると、ImportErrorが発生します。エラーを発生させるコードは次のとおりです。

djangoインポートテンプレートから
インポートcms_fragments.models

register = template.Library()

発生した例外は次のとおりです。

ImportErrorにより、cms_fragments.templatetags.cms_fragments_tagsの読み込みが発生しました:modelsという名前のモジュールがありません

私のアプリケーションのレイアウトは正しいと確信しています。

| -cms_fragments

| -_ init _ .py
| -models.py |
-templatetags

| -_ init _ .py
| -cms_fragments_tags.py |
-views.py

これに関連するすべての投稿を見たことがありますが、django-projectにあるコードとsite-packagesにあるコードの違いを報告している人は誰もいません。

ヒントはありますか?

4

1 に答える 1

0

問題は、必要なライブラリをインポート/使用する方法だと思います。次のように「モデル」をインポートすると機能するはずです。

from cms_fragments import models

しかし、この「モデル」パッケージを使用するコードを投稿する方が良いでしょう。なぜなら、どのように使用したかを推測しているだけだからです。受け取ったエラーを読むと、次のように「モデル」モジュールを参照しようとしているようです。

models.some_thing_inside_models...

しかし、次のようにインポートすると:

import cms_fragments.models

次のように参照する必要があります。

cms_fragments.models.some_thing_inside_models...

以下は、プロジェクトのディレクトリ ツリーの操作方法を説明しているドキュメントです。

于 2012-05-27T22:32:14.913 に答える