2016-09-19 35 views
1

以下定義URL名稱:URL模板標籤引起NoReverseMatch時從包括用於

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

你'項目的定義嘗試將'tool.name'作爲參數傳遞時,-page'不接受任何參數。 – Selcuk

+0

'project-page'的url標籤需要參數'project_path'。 –

回答

0

試試這個:

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

甚至不工作在'projects/urls.py'中添加'app_name = projects'後。 – FatHippo

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

,如果你把這個網址在主urls.py需要從HTML頁面通過項目路徑其他明智它會引發像沒有反向匹配異常等等正確的做法是

主要urls.py

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

項目的urls.py

添加項目路徑URL(注:通過從模板項目路徑類似{% url 'project-page' project.path %}

+0

不起作用,現在打破其他頁面。我覺得它是以正則表達式作爲字符串而不是實際的URL路徑(我可能是錯的) – FatHippo

+2

url(r'^',include('projects.urls')), – 2016-09-19 06:50:20