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

Django报错:无法找到'delete_entry'反向匹配,求解决方案

Django反向解析错误:找不到'delete_entry'的匹配路由

错误说明

报错信息:Reverse for 'delete_entry' with arguments '('',)' not found. 1 pattern(s) tried: ['deleteentry/(?P<input_id>[^/]+)/\Z']

相关代码

views.py

@login_required(login_url='/login')
def delete_entry(request, input_id):
    input=Diary.objects.get(pk=input_id)
    input.delete()                    
    return redirect('home')

urls.py

urlpatterns = [
        path('', views.welcome, name='welcome'),
        path('home', views.home, name='home'),
        path('MyEntries/', views.MyEntries, name='entries'),
        path('deleteentry/<input_id>/', views.delete_entry, name='delete_entry'),
       
    ]

HTML模板

<p>Hello, {{user.username}} !</p>

{%   for article in articles   %}
<p> {{ article.title}}<br>
    {{ article.description }} <br>
    {{ article.date        }}
    <div class="card-footer text-muted">


</p>
<a href="{% url 'delete_entry' input.id   %}" class="delete">Delete</a>
</div>
{% endfor %}

{%  endblock  %}

问题根源与解决方法

核心问题

模板里循环遍历的变量是article,但你调用{% url %}时传的是input.id,这个变量不存在,导致传入了空值,Django无法匹配需要参数的路由。

修复步骤

把模板中的input.id改成article.id:

<p>Hello, {{user.username}} !</p>

{%   for article in articles   %}
<p> {{ article.title}}<br>
    {{ article.description }} <br>
    {{ article.date        }}
    <div class="card-footer text-muted">
</p>
<a href="{% url 'delete_entry' article.id   %}" class="delete">Delete</a>
</div>
{% endfor %}

{%  endblock  %}

额外优化建议

  1. 改用POST请求删除:GET请求删除数据不安全,容易被误触发,建议用表单提交:
{% for article in articles %}
<!-- 保留原有内容 -->
<form action="{% url 'delete_entry' article.id %}" method="POST" style="display: inline;">
    {% csrf_token %}
    <button type="submit" class="delete">Delete</button>
</form>
{% endfor %}

同时修改视图,仅处理POST请求并捕获异常:

@login_required(login_url='/login')
def delete_entry(request, input_id):
    if request.method == 'POST':
        try:
            entry = Diary.objects.get(pk=input_id)
            entry.delete()
        except Diary.DoesNotExist:
            # 处理找不到对象的情况,比如跳转到提示页或直接忽略
            pass
    return redirect('home')
  1. 捕获对象不存在异常:原视图用get()方法如果找不到对应ID的数据会抛出异常,加上try-except可以避免页面崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:27:13