Django新手遇视图函数错误:AttributeError与ModuleNotFoundError
Django表单视图导入错误及修复方案
你在开发Django表单接收用户数据并存入数据库时,遇到两个错误:
AttributeError: module 'django.views' has no attribute 'my_form'- 尝试直接导入视图时出现
ModuleNotFoundError: No module named 'pinnacle_project.views'
现有代码
views.py
from django.shortcuts import render from .models import My_Model from .forms import MyForm def my_form(request): if request.method == "POST": form = MyForm(request.POST) if form.is_valid(): form.save() else: form = MyForm() return render(request, 'form.html', {'form': form})
urls.py
from django import urls from django import views from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), urls(r'form', views.my_form , name='form') ]
修复步骤
1. 修正视图导入逻辑
你当前导入的django.views是Django内置视图模块,并非你自己写的views.py。需根据文件位置导入自定义视图:
- 若
urls.py和views.py在同一个app目录下,用相对导入:from . import views - 若
urls.py是项目根目录的主配置文件,且views.py在pinnacle_projectapp中,确保app已注册后导入:from pinnacle_project import views
2. 修正URL路径配置
urls(r'form', ...)写法错误,Django需用path(普通路径)或re_path(正则路径)定义路由:
- 普通路径写法(推荐):
path('form/', views.my_form, name='form') - 正则路径写法(需先导入
re_path):from django.urls import path, re_path re_path(r'^form/$', views.my_form, name='form')
修正后的完整urls.py(同目录视图示例):
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('form/', views.my_form, name='form') ]
3. 修复views.py逻辑漏洞
当前代码中,GET请求时form变量未定义,会触发NameError。需在分支外初始化表单:
from django.shortcuts import render from .models import My_Model from .forms import MyForm def my_form(request): if request.method == "POST": form = MyForm(request.POST) if form.is_valid(): form.save() # 可选:保存后重定向避免重复提交 # return redirect('form') else: form = MyForm() # GET请求初始化空表单 return render(request, 'form.html', {'form': form})
4. 解决ModuleNotFoundError
若出现ModuleNotFoundError: No module named 'pinnacle_project.views',检查两点:
- 确认
pinnacle_project目录下存在__init__.py文件(标识为Python包)。 - 将
pinnacle_project添加到settings.py的INSTALLED_APPS列表:INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'pinnacle_project', # 注册你的app ]
内容的提问来源于stack exchange,提问作者Sneha_R
相关产品推荐
相关产品推荐

