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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:52:38