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/&lt;employee_snn&gt;/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 … % 标签中的参数:

&lt;li&gt;&lt;a href="% url <b>'edit-employee'</b> obj.ssn %"&gt;edit&lt;/a&gt;&lt;/li&gt;&lt;br&gt;

使用% url … % 标签的想法是您可以轻松更改路径模式。只要名称不变,参数不变,还是可以解析模板路径的。

【讨论】:

我正在尝试这样的事情,除了添加视图名称之外,我还在 url 标签处添加了模式。非常感谢

以上是关于Django URL 标记不起作用 - NoReverseMatch的主要内容,如果未能解决你的问题,请参考以下文章

如果使用外部javascript,则模板标记'url'不起作用

% url % 在 Django 中不起作用

django - url标签不起作用

带有参数的 Ng 地图标记图标(托管图像的 URL)不起作用

Django 1.6 301 url 重定向不起作用

Django url 似乎不起作用