Django URL 标记不起作用 - NoReverseMatch
Posted
技术标签:
【中文标题】Django URL 标记不起作用 - NoReverseMatch【英文标题】:Django URL tag not working - NoReverseMatch 【发布时间】:2021-01-15 10:17:56 【问题描述】:我知道我们不应该使用 *** 进行调试,但我在过去 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 行的基本模板中
【问题讨论】:
【参考方案1】:您不能在% url … %
template tag [Django-doc] 中使用“模式”。你应该给视图一个 name 然后用它来解析 url,所以:
urlpatterns = [
# …
path('employees/', views.display_employees),
path('edit/<str:employee_ssn>/', views.edit_employee, name='edit-employee'),
# …
]
然后您可以将其用作% url … %
标签中的参数:
<li><a href="% url <b>'edit-employee'</b> obj.ssn %">edit</a></li><br>
使用% url … %
标签的想法是您可以轻松更改路径模式。只要名称不变,参数不变,还是可以解析模板路径的。
【讨论】:
我正在尝试这样的事情,除了添加视图名称之外,我还在 url 标签处添加了模式。非常感谢以上是关于Django URL 标记不起作用 - NoReverseMatch的主要内容,如果未能解决你的问题,请参考以下文章
如果使用外部javascript,则模板标记'url'不起作用