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',
)