Django URL 标签不工作 - NoReverseMatch

Django URL tag not working - NoReverseMatch

我知道我们不应该使用 Whosebug 进行调试,但在过去的 10 个小时里我一直在尝试解决这个问题,我感到很绝望,我很抱歉。

#main project urls.py:
urlpatterns = [
    ...
    path('accounts/',include('employee.urls')),
    ...
]...

#employee.urls:
urlpatterns = [
    ...
    path('employees/', views.display_employees),
    path('edit/<str:employee_ssn>/', views.edit_employee),
    ...
]

#views.py - edit_employee being used only for testing by now
def display_employees(request):
    logged_user = request.user
    queryset = Employee.objects.filter(company=logged_user.company)
    context = {
        'employees': queryset
    }
    return render(request, 'employees.html', context)

def edit_employee(request, employee_ssn):
    context = {}
    emp = Employee.objects.filter(ssn=employee_ssn)
    
    context = {
        'employee_list': emp
    }
    return render(request, 'edit-employee.html', context)

#employees.html
<ul>
    {% for obj in employees %}
    <li>{{ obj.name }}</li>
    <li>{{ obj.ssn }}</li>
    <li>{{ obj.email }}</li>
    <li><a href="{% url '/accounts/edit/' obj.ssn %}">edit</a></li><br>
    {% endfor %}
</ul>

#edit-employee.html
<ul>
{% for obj in employee_list %}
    <li>{{ obj.name }}</li>
    <li>{{ obj.ssn }}</li>
    <li>{{ obj.email }}</li>
{% endfor %}
</ul>

点击 edit 时显示:

异常类型:NoReverseMatch 异常值:未找到“/accounts/edit/”的反向。 “/accounts/edit/”不是有效的视图函数或模式名称。

但是如果在浏览器中输入 url http://localhost:8000/accounts/edit/<employee_snn>/edit-employee.html 会正常呈现。它还说错误在我的基本模板中的第 0

您不能在 {% url … %} template tag [Django-doc] 中使用“模式”。你应该给视图一个 name 然后用它来解析 url,所以:

urlpatterns = [
    # …
    path('employees/', views.display_employees),
    path('edit/<str:employee_ssn>/', views.edit_employee<b>, name='edit-employee'</b>),
    # …
]

然后您可以将其用作 {% url … %} 标记中的参数:

<li><a href="{% url <b>'edit-employee'</b> obj.ssn %}">edit</a></li><br>

使用 {% url … %} 标签的想法是您可以轻松更改路径模式。只要名称和参数保持不变,它仍然可以解析模板路径。