【发布时间】:2016-09-19 03:46:09
【问题描述】:
具有以下定义:
urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
# Homepage
url(r'^$', projects.homepage, name='homepage'),
url(r'^create_new_project/$', projects.create_new_project),
# Project page
url(r'^(?P<project_path>\w+)/', include('projects.urls')),
]
projects/urls.py
from . import views as projects
from gpuz import views as gpuz # gpuz as a sample tool
from models import views as models
urlpatterns = [
url(r'^$', projects.projectpage, name='project-page'),
url(r'^gpuz/$', gpuz.page),
url(r'^settings/$', models.settings_new),
]
我能够解析诸如 localhost/myproject/ 和 localhost/myproject/gpuz/ 之类的 URL,但通过模板生成 URL 会出现 NoReverseMatch 错误。
例子:
base.html
<div class="navbar-collapse collapse ">
<ul id="menu-top" class="nav navbar-nav navbar-right">
<li><a href="{% url 'homepage' %}" class="navbar-btn-home">Home</a></li>
{% if project %}
<!-- NoReverseMatch -->
<li><a href="{% url 'project-page' %}">{{ project.name }}</a></li>
{% endif %}
{% if project_tools %}
{% for tool in project_tools %}
<!-- Expected URL: /myproject/gpuz/ -->
<li><a href="{% url 'project-page' tool.name %}" class="navbar-btn-{{tool.name}}">{{ tool.name }}</a></li>
{% endfor %}
<li><a href="/settings" class="navbar-btn-settings">Settings</a></li>
{% endif %}
</ul>
</div>
我正在关注这里的示例:https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#url,但它似乎对我不起作用,我不知道出了什么问题。我没有在代码中的任何地方使用reverse()。
错误信息:
NoReverseMatch
{% if project %}
<li><a href="{% url 'project-page' %}">{{ project.name }}</a></li>
{% endif %}
Exception Type: NoReverseMatch
Exception Value: Reverse for 'project-page' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
临时解决方法
我花了太多时间试图解决这个问题,所以我目前的解决方法是链接变量以形成伪硬编码 URL,例如href="/{{ project.url_path }}/{{ tool.name }}/"。
【问题讨论】:
-
你期望在
{% url 'project-page' %}得到什么 -
当您尝试将
tool.name作为参数传递时,您对project-page的定义不接受任何参数。 -
project-page的url标记需要一个参数project_path。 -
@Aison
/myproject/在这个例子中 -
@Selcuk 我仍然得到 NoReverseMatch 没有任何参数
标签: python django django-urls