【问题标题】:ModuleNotFoundError: No module named 'myapp.views.hello'; 'myapp.views' is not a packageModuleNotFoundError:没有名为“myapp.views.hello”的模块; 'myapp.views' 不是一个包
【发布时间】:2018-02-03 20:25:17
【问题描述】:

我正在使用 django 2.0.2 开发一个简单的网络应用程序。我不确定我的代码有什么问题。我收到了错误

ModuleNotFoundError: No module named 'myapp.views.hello'; 'myapp.views' is not a package

这是我的代码

views.py

from django.shortcuts import render
def hello(request):
   return render(request,'myapp/templates/hello.html',{})

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include('myapp.views.hello'), name='hello'),
]

即使我做了from myapp.views import *,也会抛出同样的错误

我的代码有什么问题?

这是树形结构

DjProject/
├── db.sqlite3
├── DjProject
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── myapp
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   ├── __init__.py
    │   └── __pycache__
    ├── models.py
    ├── __pycache__
    │   ├── admin.cpython-36.pyc
    │   ├── __init__.cpython-36.pyc
    │   ├── models.cpython-36.pyc
    │   └── views.cpython-36.pyc
    ├── templates
    │   └── hello.html
    ├── tests.py
    └── views.py

7 directories, 22 files

【问题讨论】:

  • include 不是这样工作的......只需 import views 并使用 views.hello
  • 请把你项目的树结构贴在这里。
  • @internet_user 我按照你说的尝试了。这是输出。 File "/home/sukumar/PycharmProjects/DjProject/DjProject/urls.py", line 23, in <module> path('hello/', 'views.hello', name='hello'), File "/usr/local/lib/python3.6/dist-packages/django/urls/conf.py", line 73, in _path raise TypeError('view must be a callable or a list/tuple in the case of include().') TypeError: view must be a callable or a list/tuple in the case of include().

标签: python django python-3.x model-view-controller django-views


【解决方案1】:

来自关于 include 函数的 Django 文档:

包括()

一个将完整的 Python 导入路径带到另一个 URLconf 的函数 应该在这个地方“包含”的模块。

这意味着当使用include 时,您应该在您的应用程序中为其提供一个单独的urls.py。在您的示例中,这意味着您必须在 myapp Django 应用程序下创建一个新的 urls.py

如果您不需要单独的urls.py,您可以简单地导入所需的视图:

from myapp.views import hello as myapp_hello

然后像这样使用它:

urlpatterns = [
    path('hello/', myapp_hello),
]

【讨论】:

  • 很高兴我能对@Ssukumar 有所帮助。
猜你喜欢
  • 2020-09-09
  • 2020-12-06
  • 2020-12-27
  • 2021-10-12
  • 2020-10-04
  • 2020-07-02
  • 2021-05-17
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多