DJango - NoReverseMatch错误

时间:2017-01-03 23:02:37

标签: python django frameworks django-urls

这是例外值: 反向''带参数'()'和关键字参数'{'id':1}'未找到。尝试了0种模式:[]

的index.html

<p>Estudiante: <a href="{% url 'polls.views.student_detail' id=student.id %}">{{student.stduent_name}}</a></p>

链接应该转到这样的路线“127.0.0.1:8000/polls/1/”。路线工作正常。

views.py

def student_detail(request, id):
    student = get_object_or_404(Student, id=id)
    return render(request, 'polls/student_detail.html', {'student': student})

urls.py

urlpatterns = [
     url(r'^$', views.index),
     url(r'^polls/(?P<id>[0-9]+)/', views.student_detail),

图片:

Error details

Route tree

3 个答案:

答案 0 :(得分:2)

url模板标记的第一个参数是“url name”。您需要在定义路径时指定名称,例如:

url(r'^polls/(?P<id>[0-9]+)/', views.student_detail, name='student-detail'),

然后更新您的模板以使用它:

{% url 'student-detail' id=student.id %}

请参阅网址模板和网址名称上的the documentation

答案 1 :(得分:1)

例外中的模板代码与您在问题中粘贴的模板代码不同。该异常表示您的模板标记如下:

{% url polls.views.student_detail id=student.id %}

请注意与异常一致的缺失引号。如果没有引号,django会尝试将polls.views.student_detail解析为变量,而不是将其作为字符串传递给模板标记。因为它无法解决您将空白字符串传递给模板标记。

答案 2 :(得分:1)

您正在按名称调用网址,但urls.py文件中没有此类命名网址。

你的urlpatterns应该是:

urlpatterns = [
    url(r'^$', views.index),
    url(r'^polls/(?P<id>[0-9]+)/', views.student_detail, name='student_detail'),
]

然后在你的模板中:

<p>Estudiante: <a href="{% url 'student_detail' student.id %}">{{student.stduent_name}}</a></p>

请注意,您不需要显式传递参数名称,Django会在url正则表达式模式中指定的相应参数中转换由空格分隔的每个参数。