【问题标题】:Django URL tag not working - NoReverseMatchDjango URL 标记不起作用 - NoReverseMatch
【发布时间】:2021-01-15 10:17:56
【问题描述】:

我知道我们不应该使用 stackoverflow 进行调试,但我在过去 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 行的基本模板中

【问题讨论】:

    标签: python django django-urls django-url-reverse


    【解决方案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 标签处添加了模式。非常感谢
    猜你喜欢
    • 2012-10-10
    • 2013-05-21
    • 2013-09-26
    • 2013-01-19
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多