2016-09-19 5 views
1

со следующими определениями: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 }}/".

+0

Что вы ожидаете получить в '{% URL«Проект-страница»%}' – Windsooon

+0

Ваше определение 'проекта -page' не принимает никаких параметров, пока вы пытаетесь передать 'tool.name' в качестве аргумента. – Selcuk

+0

Тег 'url' для' project-page' требует аргумента 'project_path'. –

ответ

0

Попробуйте это:

<li><a href="{% url 'projects:project-page' %}">{{ project.name }}</a></li> 
+0

Не работает даже после добавления 'app_name = projects' в' projects/urls.py'. – FatHippo

0
url(r'^(?P<project_path>\w+)/', include('projects.urls')) 

если вы поместите этот адрес в главном urls.py вам нужно пройти путь проекта со страницы сайтов другими мудрым это поднимет исключение, как никакого обратного матча так Правильный путь

Главного urls.py

url(r'^$', include('projects.urls')), 

проекты urls.py

добавить путь проекта URL (примечание: пройти путь проекта из шаблона, как {% url 'project-page' project.path %} )

+0

Не работает, теперь он разбивает другие страницы. Я чувствую, что это регулярное выражение как строка вместо фактического URL-адреса (я могу ошибаться) – FatHippo

+2

url (r '^', include ('projects.urls')), –

 Смежные вопросы

  • Нет связанных вопросов^_^