我有一个新鲜的Django 1.8项目test1。我提供了一个我想使用的名为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)


顺便说一句,我建议将apps文件夹放在项目的根目录(即BASE_DIR),而不要放在“ settings”文件夹中。

关于django - 不能为Django应用使用相对名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29826557/

10-13 02:07