со следующими определениями:URL Тег шаблона вызывает NoReverseMatch, когда имя URL из включаемого используется
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')),
]
проекты/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),
]
Я могу разрешить URL-адреса, такие как localhost/myproject/
и localhost/myproject/gpuz/
, но генерировать 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«Проект-страница»%}' – Windsooon
Ваше определение 'проекта -page' не принимает никаких параметров, пока вы пытаетесь передать 'tool.name' в качестве аргумента. – Selcuk
Тег 'url' для' project-page' требует аргумента 'project_path'. –