不能对 Django 应用使用相对名称



我有一个名为test1的新Django 1.8项目。我得到了一个名为 smartmetadata 的应用程序,我想使用它。我已经在test1/test1/apps/smartmetadata上复制了它,并将url(r'^smartmetadata/', include('smartmetadata.urls'), name='smartmetadata'),包含在test1/urls.py文件中。

当它包含在INSTALLED_APPS中时,我smartmetadata得到ImportError: No module named smartmetadata.但是,如果我将其包含在test1.apps.smartmetadata那么它会正确加载。我在Mayan等其他项目中看到,应用程序仅使用自己的标签而不是完整的路径来包含。我怎样才能做到这一点?

编辑:我的完整 urls.py 文件内容:

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    # Examples:
    # url(r'^$', 'test1.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^smartmetadata/', include('smartmetadata.urls'), name='smartmetadata'),
]

我的完整项目树:

.
├── db.sqlite3
├── manage.py
├── run.sh
└── test1
    ├── apps
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   └── smartmetadata
    │       ├── admin.py
    │       ├── forms.py
    │       ├── __init__.py
    │       ├── __init__.pyc
    │       ├── models.py
    │       ├── models.pyc
    │       ├── tests.py
    │       ├── utils.py
    │       └── views.py
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    ├── wsgi.py
    └── wsgi.pyc
您需要

apps文件夹添加到PYTHON_PATH

settings.py是一个很好的地方:

import os
import sys
# BASE_DIR should already be present in your settings.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
APPS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'apps')
sys.path.append(APPS_DIR)

顺便说一句,我建议将应用程序文件夹放在项目的根目录下(即 BASE_DIR ),而不是在"设置"文件夹中。

相关内容

  • 没有找到相关文章

最新更新