【问题标题】:Can't use relative name for Django app不能为 Django 应用程序使用相对名称
【发布时间】:2026-01-21 16:45:01
【问题描述】:

我有一个名为 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

【问题讨论】:

  • 你是在 urls.py 文件中导入那个模块吗?
  • 不,我不是。我没有看到其他项目这样做。例如,如果你能指出我玛雅人是如何做到的,那就太好了。
  • 你能在这里粘贴你的完整 urls.py 文件和你的项目树结构吗?
  • 拥有智能元数据应用程序中的所有文件/文件夹
  • 我已将其包含在 OP 中

标签: django django-apps django-1.8


【解决方案1】:

您需要将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)而不是“设置”文件夹中。

【讨论】:

最近更新 更多