Django 模板 URL 路径中的 NoReverseMatch 异常

NoReverseMatch Exception in Django template URL path

我可以访问所需的 URL 但是当它作为超链接添加到另一个模板时,模板无法呈现。

所以,当我尝试访问 http://127.0.0.1:8000/jobs/97072947-looking-for-woodcutter/add-milestones/ 时,它起作用了。

但是当我想在project_milestones的模板中插入上面的URL时: {% url 'projects:create_milestone' %}

打开http://127.0.0.1:8000/jobs/97072947-looking-for-woodcutter/milestones/时出现这个错误:

Request Method:  GET
Request URL:     http://127.0.0.1:8000/jobs/97072947-looking-for-woodcutter/milestones/
Django Version:  1.11.3
Exception Type:  NoReverseMatch
Exception Value: Reverse for 'create_milestone' with no arguments not found. 1 pattern(s) tried: ['jobs/(?P<project>[-\w]+)/(add-milestones)/$']
Python Version:  3.6.1

views.py:

def project_milestones(request, project):
    project = get_object_or_404(Project, slug=project)
    ...code..
    return render(request, 'projects/employer_milestones_project.html' {'project': project,})


def create_milestone(request, project):
    project = get_object_or_404(Project, slug=project)
    ..code...
    return render(request, 'projects/employer_create_milestone.html',
                  {'project': project})

urls.py:

url(r'^'r'(?P<project>[-\w]+)/(add-milestones)/$',
    create_milestone, name='create_milestone'),

url(r'^'r'(?P<project>[-\w]+)/(milestones)/$',
    project_milestones, name='project_milestones'),

我在这里错过了什么?我也试过 {% url 'projects:create_milestone' project=project.slug %} 但似乎没有任何效果。此外,如果我删除该内置 url 标记,页面将成功加载。

我确定答案就在 documentation or here 的某个地方,但我无法理解。抱歉,如果问题结构不合理。谢谢!

您的 url 模式有两个问题。删除字符串中的 r',并删除 add-milestone 和 milestones 两边的括号。

url(r'^(?P<project>[-\w]+)/add-milestones/$',
create_milestone, name='create_milestone'),
url(r'^(?P<project>[-\w]+)/milestones/$',
project_milestones, name='project_milestones'),