2

pip経由でインストールされたアプリのテンプレートをオーバーライドする適切な方法は何だろうと思っています. 私の例は、django-notificationsアプリに関するものです。構造は次のとおりです。

notifications
|---- __init__.py
|---- templates
      |---- notifications
            |---- list.html
            |---- notice.html

アプリでこの構造を複製し、それに応じて .html ファイルを変更しました。しかし今、私は次のエラーに直面しています:ImportError: cannot import name notify私が呼び出す別のアプリ(プロファイル)からのビューで発生しますfrom notifications import notify

テンプレートをオーバーライドしなければ、エラーは発生しません。私は何が欠けていますか?settings.py に追加する必要があるものはありますか?

(私はパッケージ内の README.md インストール手順に正確に従い、テンプレートをオーバーライドすることなく適切に動作させました)

後戻り

File "/projectpath/project/urls.py", line 13, in <module>
  url(r'^profile/', include('profile.urls')),

File "/home/user/.virtualenvs/project/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 26, in include
  urlconf_module = import_module(urlconf_module)

File "/home/user/.virtualenvs/project/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
  __import__(name)

File "/projectpath/profile/urls.py", line 2, in <module>
  from profile import views

File "/projectpath/profile/views.py", line 17, in <module>
    from notifications import notify

ImportError: cannot import name notify

意見

from notifications import notify

def edit(request):
  ...
  notify.send(request.user, recipient=request.user, verb='you reached level 10')

設定

# Project directory root assuming: yunite.settings.base
PROJECT_DIR = Path(__file__).ancestor(3)

#ROOT_PATH = os.path.dirname(__file__)


TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)


TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
    "django.contrib.auth.context_processors.auth",
)


# Directory to find templates
TEMPLATE_DIRS = (
    PROJECT_DIR.child("templates"),
)


INSTALLED_APPS = (
    ...
    'notifications',
)
4

2 に答える 2

3

Django でテンプレートをオーバーライドするのは簡単です。メイン アプリケーション ディレクトリには、templates ディレクトリが必要です (まだ作成していない場合は作成します)。次に、テンプレート ディレクトリ内に新しいディレクトリを作成します。この場合、(notifications) という名前が付けられます。次に、テンプレート ファイルをここ (list.htmlおよびnotice.html) にコピーします。

完了したら、独自のテンプレートでアプリ テンプレートをオーバーライドしました。自由に編集してください。

于 2014-04-22T05:37:01.937 に答える
0

質問してすみません: INSTALLED_APPS に「通知」を追加しましたか? これは、オーバーライドされたテンプレートがインポート エラーを表示するだけのようです。

于 2014-04-22T05:16:21.473 に答える