【问题标题】:ModuleNotFoundError: No module named 'apps'ModuleNotFoundError:没有名为“应用程序”的模块
【发布时间】:2019-08-21 12:45:47
【问题描述】:

我在我的项目中使用 Django 1.9 和 DRF 3.9.2。在我的 urls.py 中,我使用了这段代码

from django.conf import settings
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include('apps.rest_slack.urls', namespace='rest_slack')),
]

我已经在我的 rest_slack-urls.py 中设置了一个路由器

from django.conf.urls import url
from rest_framework import routers
from rest_slack.views import DRSEventView, DRSCommandView

router = routers.DefaultRouter()
router.register(r'web', DRSEventView)
router.register(r'events', DRSCommandView)

urlpatterns = router.urls

当我尝试运行服务器时,它给了我 ModuleNotFoundError: No module named 'apps' 错误。请告诉我可以做些什么改变?

myproject/
 |-- slack/
 |    |-- rest_slack/                
 |    |    |-- migrations/
 |    |    |    +-- __init__.py
 |    |    |-- __init__.py
 |    |    |-- admin.py
 |    |    |-- apps.py
 |    |    |-- models.py
 |    |    |-- tests.py
 |    |    |-- urls.py
 |    |    +-- views.py
 |    |-- slack/
 |    |    |-- __init__.py
 |    |    |-- settings.py
 |    |    |-- urls.py
 |    |    |-- wsgi.py
 |    +-- manage.py
 +-- venv/

【问题讨论】:

  • 你的文件夹结构是什么?
  • 与此有关吗? @AdamBarnes
  • 非常好!当您将一个带点的字符串作为第一个参数传递给include() 时,它会尝试导入该路径。如果import apps.rest_slack.urls 不起作用,您的include() 也不起作用。要确定要使用的正确字符串,需要查看您的文件夹结构。
  • 你能告诉我如何通过 mac 中的命令提示符查看它吗? @AdamBarnes
  • 我已经更新了,请检查。 @AdamBarnes

标签: django django-rest-framework django-views django-urls


【解决方案1】:

欢迎来到 Stack Overflow!

当您将一个带点的字符串作为第一个参数传递给include() 时,它会尝试导入该路径。如果import apps.rest_slack.urls 不起作用,您的include() 也不起作用。

从您的文件夹结构来看,您似乎需要使用include('rest_slack.urls', ...)

要确认是否是这种情况,您可以在./manage.py shell 中运行import rest_slack.urls,或者只是在您的slack/urls.py 中进行更改,看看它是否有效。

【讨论】:

  • django.core.exceptions.ImproperlyConfigured:包含的 URLconf '' 似乎没有有任何模式。如果您在文件中看到有效模式,则问题可能是由循环导入引起的。
  • 现在当我尝试运行服务器时出现此错误
  • 似乎它可能是issue with DRF 并在include() 中使用命名空间?尝试从您的 include() 调用中删除命名空间,但如果这不起作用,我建议您打开另一个问题,因为您的原始问题现已解决。
  • 同时检查this问题 - 它可能是相关的。
【解决方案2】:

从您的项目结构看来,您的 url 应该是这样配置的:

from django.conf import settings
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include('slack.rest_slack.urls', namespace='rest_slack')),
]

或者如果这不起作用尝试:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include('myproject.slack.rest_slack.urls', namespace='rest_slack')),
]

您的项目结构为myproject.slack.rest_slack.urls.py。我在任何地方都看不到应用程序文件夹。

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2022-06-25
    • 2020-09-30
    • 2021-01-27
    • 2019-03-28
    • 2021-03-29
    • 2022-01-07
    • 2020-11-17
    相关资源
    最近更新 更多