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

Django引入new_entry.html后出现NoReverseMatch错误,求解决

问题排查与修复

1. URL名称不匹配(核心错误)

模板new_entry.html的表单action里用了learning_logs:new_entry作为URL名称,但在urls.py中,新增条目的URL配置的name是entry,不是new_entry。Django找不到对应的路由映射,直接抛出NoReverseMatch错误。

修复方案(二选一,推荐第二种):

  • 改模板:把{% url 'learning_logs:new_entry' topic.id %}替换为{% url 'learning_logs:entry' topic.id %}
  • 改URL配置:将urls.py里新增条目那行的name='entry'改成name='new_entry',语义更清晰:
# urls.py中修改对应行
path('new_entry/<int:topic_id>/', views.new_entry, name='new_entry'),

2. views.py缩进错误

new_entry视图里,处理空白表单或无效表单的context和render代码缩进错误,现在属于else块的子级。当请求是GET时,函数会没有返回值,引发服务器内部错误。

修复方式:
把context和return render(...)的缩进调整到与if request.method != 'POST'同级:

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 = Entry()
    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)

3. 额外检查项

  • 确认EntryForm已正确导入到views.py中,否则会引发NameError
  • 确认Entry模型已定义topic外键关联到Topic模型,否则保存条目时会报错

内容的提问来源于stack exchange,提问作者Dokkaebi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:33:26