Django AttributeError:模块'learning_logs.views'无'new_entry'属性的解决方法
问题分析与修复方案
出现AttributeError: module 'learning_logs.views' has no attribute 'new_entry'的核心原因是视图函数缩进错误,导致new_entry未被正确定义,同时new_topic函数也存在语法和逻辑问题,以下是具体修复步骤:
1. 修复views.py中new_entry函数的缩进问题
Python依赖缩进划分代码块,原代码中new_entry的缩进混乱,导致函数定义不完整:
修复后的new_entry函数
def new_entry(request, topic_id): """Add a new entry for a particular topic.""" topic = Topic.objects.get(id=topic_id) if request.method != 'POST': # No data submitted; create a blank form. form = EntryForm() else: # POST data submitted; process data. form = EntryForm(data=request.POST) if form.is_valid(): new_entry = form.save(commit=False) new_entry.topic = topic new_entry.save() return redirect('learning_logs:topic', topic_id=topic_id) # Display a blank or invalid form. context = {'topic': topic, 'form': form} return render(request, 'learning_logs/new_entry.html', context)
修复点:
- 对齐
if语句块内的代码缩进 - 修正末尾
context和return语句的缩进,使其与函数内其他代码保持一致
2. 修复views.py中new_topic函数的语法与逻辑问题
原函数存在字典语法错误,且渲染表单的逻辑位置错误:
修复后的new_topic函数
def new_topic(request): """Add a new topic""" if request.method != 'POST': # No data submitted; create a blank form. form = TopicForm() else: # POST data submitted; process data. form = TopicForm(data=request.POST) if form.is_valid(): form.save() return redirect('learning_logs:topics') # Display a blank or invalid form. context = {'form': form} return render(request, 'learning_logs/new_topic.html', context)
修复点:
- 将错误的字典写法
{'form: form'}改为正确的{'form': form} - 将渲染表单的代码移到
if-else结构之外,确保GET请求和POST验证失败时都能返回表单页面
3. 清理urls.py中的冗余符号
原代码中new_topic的注释行末尾有多余反斜杠,虽然不直接报错,但影响可读性:
修复后的urls.py片段
# Page for adding a new topic path('new_topic/', views.new_topic, name='new_topic'),
验证修复
修改完成后,重启Django开发服务器:
python manage.py runserver
再次访问localhost:8000/new_topic即可正常加载页面,new_entry视图也能被正确识别。
内容的提问来源于stack exchange,提问作者Swyy
相关产品推荐
相关产品推荐

