Django修改了pip安装的应用程序的模板

时间:2014-04-22 04:32:47

标签: python django notifications django-templates django-notification

我想知道为通过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',
)

2 个答案:

答案 0 :(得分:2)

在Django中覆盖模板很简单。在主应用程序目录中,必须有一个模板目录(如果尚未创建)。然后在模板目录中创建一个新目录,在您的案例中命名(通知)。然后在此处复制模板文件(list.htmlnotice.html)。

完成后,您已使用自己的模板覆盖了应用模板。随意编辑它们。

答案 1 :(得分:0)

很抱歉问:您是否添加了&#34;通知&#34;到INSTALLED_APPS?这听起来像被覆盖的模板只是使导入错误可见。