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'),
我可以访问所需的 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'),