You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_project app中,确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:07:36