ModuleNotFoundError:没有名为'myapp.views.hello'的模块; 'myapp.views'不是一个包

时间:2018-02-03 20:25:18

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

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

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

1 个答案:

答案 0 :(得分:4)

关于include函数的Django文档:

  

包括()

     

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

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

如果您不需要单独的urls.py,则只需导入所需的视图:

from myapp.views import hello as myapp_hello

然后像这样使用它:

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