Django出现NoReverseMatch错误:无法匹配'by_person'路由参数
问题修复方案
1. 修复URL配置的语法错误
你的by_person路由缺少参数的闭合尖括号,导致Django无法正确解析路由规则,这是触发NoReverseMatch的核心原因。
修改URL配置为:
urlpatterns = [ path('person/<int:person_pk>/', by_person, name='by_person'), # 补上闭合尖括号,末尾加斜杠符合Django规范 path('', people, name='people'), ]
2. 修正模板中的拼写错误
模板扩展路径里的laayout是拼写错误,改成正确的layout:
{% extends 'layout/basic.html' %} {% block content %} <li><a href="{% url 'people' %}">Main page</a></li> {% for per in people %} <h1><a href="{% url 'by_person' per.pk %}">{{ per }}</a></h1> {% endfor %} {% endblock content %}
3. 修复视图函数的语法问题
视图函数的类型提示错误,同时调整变量名避免潜在混淆:
from django.shortcuts import render from django.http import HttpResponse from .models import Adult # 确保导入对应的Adult模型 def people(request) -> HttpResponse: people_list = Adult.objects.all() template_ = 'people.html' context = { 'people': people_list, } return render(request, template_, context=context)
额外检查项
- 确保
Adult模型已完成数据库迁移,且数据库中存在有效数据(查询集为空不会触发当前错误,但会导致列表无内容) - 确认
by_person视图函数已正确定义并接收person_pk参数:def by_person(request, person_pk): adult = Adult.objects.get(pk=person_pk) return render(request, 'person_detail.html', {'adult': adult})
内容的提问来源于stack exchange,提问作者azimut
相关产品推荐
相关产品推荐

