不能为 Django 应用程序使用相对名称
Can't use relative name for Django app
我有一个名为 test1 的全新 Django 1.8 项目。我获得了一个名为 smartmetadata 的应用程序,我想使用它。我已经在 test1/test1/apps/smartmetadata 上复制了它,并且在 test1/urls.py 中包含了 url(r'^smartmetadata/', include('smartmetadata.urls'), name='smartmetadata'),
文件。
将它作为 smartmetadata
包含在 INSTALLED_APPS
中时,我得到 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
),而不是放在 "settings" 文件夹中。
我有一个名为 test1 的全新 Django 1.8 项目。我获得了一个名为 smartmetadata 的应用程序,我想使用它。我已经在 test1/test1/apps/smartmetadata 上复制了它,并且在 test1/urls.py 中包含了 url(r'^smartmetadata/', include('smartmetadata.urls'), name='smartmetadata'),
文件。
将它作为 smartmetadata
包含在 INSTALLED_APPS
中时,我得到 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
),而不是放在 "settings" 文件夹中。