Django中ModuleNotFoundError: No module named 'HomePage'错误求助
Hey Justin,别慌!作为Django新手碰到这种ModuleNotFoundError太正常了,我帮你一步步捋清楚可能的问题,咱们慢慢解决~
先排查最常见的几个原因
1. 你的App命名/结构是不是出了大小写问题?
Django和Python对模块名的大小写是严格敏感的!很多新手会不小心把App文件夹命名成HomePage(大写开头),但导入的时候又写成小写,或者反过来。
先看看你的项目结构是不是类似这样(规范的结构):
mysite/ manage.py mysite/ # 项目配置文件夹 __init__.py settings.py urls.py homepage/ # 这里必须是小写!(或者你命名的准确大小写,要和导入完全一致) __init__.py # 这个空文件必须有!告诉Python这是可导入的模块 views.py templates/ homepage/ # 模板要放在App下的templates子文件夹里,避免和其他App模板冲突 Homepage.html
如果你的App文件夹是HomePage,那所有导入都要严格写HomePage,但真心建议改成全小写的homepage,能避开很多大小写坑。
2. 确认你的App已经加到了settings.py里
打开mysite/settings.py,找到INSTALLED_APPS列表,必须把你的App加进去,比如:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', # ... 其他默认App 'homepage', # 这里要和你的App文件夹名字完全一致! ]
如果没加这一行,Django根本识别不到你的App,自然会报找不到模块的错误。
3. 检查urls.py里的导入和路由配置
你贴的mysite/urls.py代码没写完,我猜你可能是想导入HomePage的views?这里的写法很关键:
方式一:直接在项目urls里导入views
from django.conf.urls import url, include from django.contrib import admin # 正确导入:从你的App里导入views,名字要和App文件夹一致 from homepage import views urlpatterns = [ url(r'^admin/', admin.site.urls), # 首页路由,指向views里的index函数 url(r'^$', views.index, name='home'), ]
方式二:用include拆分路由(更推荐的Django最佳实践)
先在你的homepage文件夹里新建一个urls.py,内容如下:
from django.conf.urls import url from . import views # 用相对导入,避免硬编码App名 urlpatterns = [ url(r'^$', views.index, name='home'), ]
然后在项目的mysite/urls.py里改成:
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # 把根路径的路由交给homepage的urls处理 url(r'^', include('homepage.urls')), ]
4. 确保views.py里的模板渲染正确
在homepage/views.py里,你需要写一个视图函数来返回Homepage.html,比如:
from django.shortcuts import render def index(request): # 模板路径是相对于App的templates文件夹的,所以是'homepage/Homepage.html' return render(request, 'homepage/Homepage.html')
如果你的模板放在项目根目录的templates文件夹里,那要在settings.py的TEMPLATES配置里添加DIRS:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 告诉Django去根目录找模板 'APP_DIRS': True, # ... 其他配置 }, ]
最后再检查两个容易忽略的点
- 每个App文件夹里必须有
__init__.py空文件,没有的话Python会把它当成普通文件夹,不是可导入的模块。 - 重启一下Django开发服务器!有时候修改配置后需要重启才会生效。
你先按照上面的步骤挨个排查,应该能找到问题所在~如果还是不行,把你的完整项目结构、urls.py和views.py代码贴出来,我再帮你细查!
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

