Django执行CRUD操作触发NoReverseMatch反向解析错误求助
出现NoReverseMatch错误的核心原因是根路由配置错误:你在项目根urls.py中为多个带<int:pk>参数的前缀路径重复引入了应用路由,导致路由反向解析时匹配了错误的父级路径前缀。当你在/delete/13/路径下的视图执行redirect('imagem:projeto')时,Django会将路由拼接为delete/13/projeto/,和预期的根路径下的/projeto/不符,因此报错。
1. 修正项目根urls.py配置
删除多余的include语句,仅保留一次应用路由引入即可,你的应用内部已定义了全量路由,不需要拆分前缀引入:
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), # 仅保留这一行引入应用路由即可 path('', include('imagem.urls')), ]
2. (可选)优化模板链接写法
替换模板中硬编码的url为Django反向解析写法,后续修改路由时无需全局调整模板:
{% for dbs in db %} <td> <th>{{dbs.id}}</th> <td>{{dbs.nome}}</td> <td>{{dbs.tipo_img}}</td> <td> <a href="{% url 'imagem:view' dbs.id %}" class="btn btn-dark">Visualizar</a> <a href="{% url 'imagem:edit' dbs.id %}" class="btn btn-primary">Editar</a> <a href="{% url 'imagem:delete' dbs.id %}" class="btn btn-danger btnDel">Deletar</a> </td> </tr> {% endfor %}
配置修改完成后重启服务即可,视图中原有的redirect('imagem:projeto')逻辑无需调整,会正常解析到正确的/projeto/路径。
内容的提问来源于stack exchange,提问作者Rafael Fidalgo
相关产品推荐
相关产品推荐

