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

Django使用slug生成项目页面链接报NoReverseMatch错误如何解决

Django NoReverseMatch 报错排查方案

错误根本原因及修复步骤

    1. 模板URL调用缺失命名空间
      你在urls.py中设置了app_name = 'portfolio',属于声明了URL命名空间,模板中调用视图名时必须带上命名空间前缀,格式为{% url '命名空间:视图名' %}
    1. URL调用未传递必填的slug参数
      你的详情路由规则中定义了<slug:project_id>参数,生成跳转链接时必须传入对应项目的slug值,否则无法匹配路由
    1. 视图逻辑额外问题(非本次报错直接原因,但会导致后续功能异常)
    • 详情视图中获取单个项目错误使用了get_list_or_404,应该改为get_object_or_404,前者返回列表,后者返回单个项目对象
    • 首页视图project_home错误渲染了详情页模板projects/project_detail.html,需要改为你实际的首页模板文件路径

对应代码修改

模板HTML修改

将a标签的href属性修改为:

<a href="{% url 'portfolio:individual_project' project.slug %}">
<img src="{{ project.image.url }}" class="img-fluid mb-2"></a>
{% endif %}
<div>
<h2 class= "category">{{ project.category }}</h2>
<h3 class="client">{{ project.description }}</h3>
<h4 class="project_type">{{ project.title }}</h4>
</div>

views.py修改

from django.shortcuts import render, get_object_or_404, get_list_or_404
from .models import Project

def individual_project_view(request, project_id):
     projectpage = get_object_or_404(Project, slug=project_id) 
     return render(request, 'projects/project_detail.html', {'projectpage':projectpage})

def project_home(request):
     portfolioprojects = get_list_or_404(Project)
     # 此处替换为你实际的首页模板路径
     return render(request, 'projects/project_home.html', {'portfolioprojects':portfolioprojects})

urls.py补充说明

只要你的项目根路由include当前应用路由时没有额外指定命名空间,保持现有app_name = 'portfolio'的配置即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:48:01