跟随Django2.0教程Part4时遇NoReverseMatch错误求助
解决Django 2.0中访问/polls/1/时的NoReverseMatch错误
我帮你分析下这个错误的原因,大概率是URL配置或者模板反向解析的参数出了问题,咱们一步步来排查:
1. 先检查polls应用的URL配置是否完整
从你贴的代码来看,vote的URL路径明显没写完(显示path('<i...')),这会直接导致Django找不到对应的反向解析模式。你需要把vote的URL定义补全:
修改polls/urls.py,确保vote的路径正确:
from django.urls import path from . import views app_name = 'polls' urlpatterns = [ path('', views.index, name='index'), path('<int:question_id>/', views.detail, name='detail'), path('<int:question_id>/results/', views.results, name='results'), # 补全vote的URL,注意要带<int:question_id>参数,并且name设为'vote' path('<int:question_id>/vote/', views.vote, name='vote'), ]
2. 检查模板中的反向解析是否传对了参数
错误提示里提到参数是('',),说明反向解析时没有传入有效的question_id值。你得看看detail.html模板里的表单action部分:
正确的写法应该是这样的:
<form action="{% url 'polls:vote' question.id %}" method="post"> {% csrf_token %} <!-- 你的选项表单内容 --> </form>
这里要注意两个点:
- 模板里必须能拿到
question对象(也就是视图要把这个变量传给模板) - 一定要用
question.id作为参数,不能直接写question,也不能写错变量名(比如拼写成queston.id)
3. 确认视图函数正确传递了模板变量
最后检查polls/views.py里的detail视图,确保它把question对象传给了模板:
from django.shortcuts import get_object_or_404, render from .models import Question def detail(request, question_id): # 用get_object_or_404获取对应的Question对象 question = get_object_or_404(Question, pk=question_id) # 把question变量传给模板 return render(request, 'polls/detail.html', {'question': question})
如果这里没传question变量,模板里的question.id就会是空值,自然会触发反向解析错误。
修改完这些后,重启Django服务器再访问/polls/1/,应该就能正常解决这个问题啦~
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

