2017-03-09 80 views
0

我是新來的Django並不能似乎找到了解決我的問題NoReverseMatch錯誤的Django 1.10

我收到以下錯誤

Reverse for 'todo_list' with arguments '()' and keyword arguments 

'{'cid': 1}' not found. 1 pattern(s) tried: ['todo/(?P<cid>)/'] 
    1 {% extends "base.html" %} 
    2 {% block nav_title %} Company Batches {% endblock nav_title %} 
    3 {% block content %} 
    4  <div class="jumbotron"> 
    5 
    6   {% for obj in object_list %} 
    7    <a href={% url 'todo_list' cid=obj.company.id%} class="href-nostyle"> 
    8     <div class="container"> 
    9      <div class="jumbotron" style="background:white"> 
    10       <div class="text-center"> 
    11        <h1>{{ obj.company }}<br> 
    12         <small>{{ obj.job }}</small> 
    13        </h1> 
    14       </div> 
    15     </div> 
    16     </div> 
    17   </a> 

此模板位於一個名爲應用company_batches和我試圖用一個href

我的網址標籤導航用戶的待辦事項程序是

{% url 'todo_list' cid=obj.company.id%} 

我的主urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', home, name='home'), 
    url(r'^batches/', include('company_batches.urls')), 
    url(r'^todo/', include('todo.urls'), name='todo') 
] 

待辦事項/ urls.py

urlpatterns = [ 
    url(r'^$', ToDoCreateView.as_view(), name='todo_create'), 
    url(r'^(?P<cid>)/', ToDoListView.as_view(), name='todo_list'), 
    ] 

相關views.py

class ToDoListView(ListView,): 
    template_name = 'todo/todo_list.html' 
    def get_context_data(self, *args, **kwargs): 
     context = super(ToDoListView, self).get_context_data(*args, **kwargs) 
     return context 
    def get_queryset(self, cid): 
     return ToDoList.objects.filter(company=self.cid) 

我找不出我在做什麼錯誤的,一些指導將不勝感激

+0

在正則表達式你'cid'捕獲組是空的。 –

回答

2

有幾件事情要注意這裏。

正則表達式,可能實際的問題在這裏
捕捉你url regexcid不包含正確的捕獲組。因爲它是一個ID,你應該只捕獲數字與\d+

url(r'^(?P<cid>\d+)/', ToDoListView.as_view(), name='todo_list'), 

關閉URL的正則表達式
當前URL不包含結束標誌。如果網址實際上在/app/<id>/之後結束,那麼您應該最好使用美元符號$關閉正則表達式。

url(r'^(?P<cid>\d+)/$', ToDoListView.as_view(), name='todo_list'), 

命名空間的使用
您使用的是name而包括todo應用網址。要正確使用名稱空間,您應該在todo/ url中刪除名稱,並將 namespace添加到include。

url(r'^todo/', include('todo.urls', namespace='todo')) 

現在在你的模板,你可以使用的名稱空間

{% url 'todo:todo_list' cid=obj.company.id %} 
+0

是的,你是正確的,我的正則表達式沒有正確捕獲cid。感謝您的詳細解答 –

2

你的正則表達式壞了;它沒有任何符合的字符。它看起來像你想要捕捉一個數字PK,它應該是:

r'^(?P<cid>\d+)/