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

Django报错:Reverse for 'new_entry'参数为空,请求排查

Django Reverse for 'new_entry' 错误修复方案

核心问题总结

你遇到的Reverse for 'new_entry' with arguments '("")' not found错误,本质是模板变量传递错误+URL路由语法混用+视图函数拼写/参数错误共同导致的,下面逐一给出修复方案:


1. 模板中topic_id变量不存在

在topic视图函数中,传递给模板的上下文只有topic和entries,没有topic_id这个变量,模板调用{% url 'test_logs:new_entry' topic_id %}时自然取不到值,传入空字符串导致路由反转失败。

修复topic.html:
将模板中的topic_id替换为topic.id(直接从topic对象获取ID属性):

<p>
    <a href="{% url 'test_logs:new_entry' topic.id %}">add new entry</a>
</p>

2. URL路由语法混用错误

你使用了re_path(旧版url函数),但混用了path函数的<int:topic_id>语法,re_path需要用正则表达式捕获参数。

修复urls.py:
修改new_entry的路由规则为正则格式:

from django.urls import re_path as url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^topics/$', views.topics, name='topics'),
    url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
    url(r'^new_topic/$', views.new_topic, name='new_topic'),
    # 修复为正则捕获格式
    url(r'^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'),
]

如果你的Django版本是2.0+,更推荐使用path函数(语法更直观),修改后完整的urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('topics/', views.topics, name='topics'),
    path('topics/<int:topic_id>/', views.topic, name='topic'),
    path('new_topic/', views.new_topic, name='new_topic'),
    path('new_entry/<int:topic_id>/', views.new_entry, name='new_entry'),
]

3. 视图函数中的两处低级错误

  • 拼写错误:form.is_vaild()少写了一个字母d,应该是form.is_valid()
  • 重定向参数错误:return redirect('test_logs:topic', topic_id==topic_id)中的topic_id==topic_id是布尔值True,应该直接传入topic_id

修复views.py中的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('test_logs:topic', topic_id)  # 修复重定向参数
        
    context = {'topic': topic, 'form': form}
    return render(request, 'test_logs/new_entry.html', context)

4. new_entry.html中的无效链接和表单缺失

模板中的返回链接{% url '?' %}>是无效语法,且缺少表单提交逻辑,导致无法提交新条目。

修复new_entry.html:

{% extends "test_logs/base.html" %}
{% block content %}

<p><a href="{% url 'test_logs:topic' topic.id %}">{{ topic }}</a></p>
<p>Add a new entry:</p>
<!-- 补充表单标签和提交按钮 -->
<form action="{% url 'test_logs:new_entry' topic.id %}" method="post">
    {% csrf_token %}
    {{ form.as_div }}
    <button type="submit">add entry</button>
</form>
{% endblock content %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:31:06