将模板变量加入URL,满足反向匹配

Add template variable into URL and satisfy reverse match

我找到了一种将变量注入 URL 每个 的方法,但我的反向匹配不起作用。我需要使用重新路径和使用正则表达式吗?

当前url.py

    path('student/item/drilldown/<str:type>/<int:num>/',views.StudentBehaviorListView.as_view(),name='student_item_list_drilldown'),

原文w/hard-coding:

<a href="{%url 'registration:student_item_list_drilldown' type='grade' num=6%}">

使用变量注入:

<a href="{%url 'registration:student_item_list_drilldown'%}?type=grade&num={{i.grade}}">{{i.grade}}th Grade</a>

错误信息:

NoReverseMatch at /registration/dashboard/
Reverse for 'student_item_list_drilldown' with no arguments not found. 1 pattern(s) tried: ['registration/student/item/drilldown/(?P<type>[^/]+)/(?P<num>[0-9]+)/\Z']

这个:

{% url 'registration:student_item_list_drilldown' %}

将在读取为 html 之前尝试查找名为 student_item_list_drilldown 的路径。这就是它尝试(但失败)在 {% url 'registration:student_item_list_drilldown' %} 中找到 <str:type><int:num> 的原因。您必须将该变量包含在 {% url ... %} 括号内。

最好的方法是:

{% url 'registration:student_item_list_drilldown' 'grade' i.grade %}