解决Django中ModuleNotFoundError: No module named 'hub.forms'报错
Django中ModuleNotFoundError: No module named 'hub.forms'问题解决
问题描述
在Django项目中执行from .forms import VisitorForm语句时,持续抛出ModuleNotFoundError: No module named 'hub.forms'错误。
相关代码文件
views.py
from django.urls import reverse from django.shortcuts import render, redirect from django.http import HttpResponse, HttpResponseRedirect from django.template import loader from .models import * from .models import Hub from .forms import VisitorForm def visitors(request): form = VisitorForm if request.method == 'POST': form = VisitorForm(request.POST) if form.is_valid(): form.save() context = {'form':form} return render(request, 'visitors.php', context)
forms.py
from django.forms import ModelForm from .models import Hub class VisitorForm(ModelForm): class Meta: model = Visitor fields = '__all__'
models.py
from django.db import models from django import forms class Hub(models.Model): myname = models.CharField(max_length=255) emailaddress = models.EmailField(max_length=255) phone = models.IntegerField(null=True) reply = models.TextField(null=True) class Meta: db_table = "hub" def __str__(self): return f"{self.myname} {self.phone}"
urls.py
from django.urls import path from . import views urlpatterns = [ path('visitors/', views.visitors, name="visitors"), ]
报错堆栈信息
File "/Users/FOfem/opt/anaconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/Users/FOfem/fchub/urls.py", line 21, in <module> path('forra/', include('hub.urls')), File "/Users/FOfem/myproject/lib/python3.9/site-packages/django/urls/conf.py", line 38, in include urlconf_module = import_module(urlconf_module) File "/Users/FOfem/opt/anaconda3/lib/python3.9/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/Users/FOfem/hub/urls.py", line 2, in <module> from . import views File "/Users/FOfem/hub/views.py", line 8, in <module> from .forms import VisitorForm ModuleNotFoundError: No module named 'hub.forms'
已尝试的方法
曾在forms.py中创建名为hub的类,修改后的代码如下,但问题仍未解决:
from django.forms import ModelForm from .models import Hub class VisitorForm(ModelForm): class Meta: model = Visitor fields = '__all__' class hub(ModelForm): class Meta: model = Visitor fields = ["myname", "emailaddress", "phone", "reply"] class Meta: db_table = "hub"
解决步骤
1. 验证文件结构与命名
确认forms.py文件确实位于hub应用的根目录下,且文件名拼写完全正确(必须是小写的forms.py,不能有大写字母或拼写错误)。Django依赖应用目录下的文件名识别模块,文件缺失或命名错误会直接触发模块找不到的异常。
2. 修复forms.py的语法与逻辑错误
原forms.py存在两个关键问题:
- 引用了未定义的
Visitor模型,你的models.py中只有Hub模型,需替换为model = Hub; class Meta块缩进错误,Python是缩进敏感语言,缩进错误会导致语法异常,进而影响模块加载。
修正后的forms.py:
from django.forms import ModelForm from .models import Hub class VisitorForm(ModelForm): class Meta: model = Hub fields = '__all__'
3. 修复views.py的语法错误
原views.py中form = VisitorForm一行存在缩进错误,且未实例化表单(需加括号),同时注意Django模板文件后缀应为.html而非.php:
修正后的visitors函数:
def visitors(request): form = VisitorForm() if request.method == 'POST': form = VisitorForm(request.POST) if form.is_valid(): form.save() context = {'form':form} return render(request, 'visitors.html', context)
4. 确认应用已注册到项目
打开项目根目录的settings.py,确保hub应用已添加到INSTALLED_APPS列表:
INSTALLED_APPS = [ # 其他默认应用 'hub', ]
5. 清除缓存并重启服务
执行以下命令清除Django缓存,然后重启开发服务器:
python manage.py clearcache python manage.py runserver
内容的提问来源于stack exchange,提问作者Fredrick Ofem
相关产品推荐
相关产品推荐

