2017-03-09 92 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+)/