NoReverseMatch 错误 Django 1.10
NoReverseMatch error Django 1.10
我是 Django 的新手,似乎找不到解决我的问题的方法
我收到以下错误
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 的应用程序中,我正在尝试将用户导航至 todo 应用程序使用 href
我的 url 标签是
{% 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')
]
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)
我不知道自己做错了什么,非常感谢您的指导
您的正则表达式已损坏;它没有任何可匹配的字符。貌似要抓取数字PK,做的应该是:
r'^(?P<cid>\d+)/
这里有几点需要注意。
正则表达式,可能是这里的实际问题
在 url regex
中捕获 cid
不包含正确的捕获组。由于它是一个 ID,因此您应该只捕获带有 \d+
的数字
url(r'^(?P<cid>\d+)/', ToDoListView.as_view(), name='todo_list'),
关闭 url 正则表达式
当前 url 不包含结束符号。如果 url 实际上在 /app/<id>/
之后结束,您很可能应该用美元符号 $
.
结束正则表达式
url(r'^(?P<cid>\d+)/$', ToDoListView.as_view(), name='todo_list'),
命名空间使用
您正在使用 name
,同时包含 todo
应用程序 url。要正确使用命名空间,您应该在 todo/
url 中删除名称并添加
namespace
到 include.
url(r'^todo/', include('todo.urls', namespace='todo'))
现在您可以在模板中使用命名空间
{% url 'todo:todo_list' cid=obj.company.id %}
我是 Django 的新手,似乎找不到解决我的问题的方法
我收到以下错误
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 的应用程序中,我正在尝试将用户导航至 todo 应用程序使用 href
我的 url 标签是
{% 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')
]
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)
我不知道自己做错了什么,非常感谢您的指导
您的正则表达式已损坏;它没有任何可匹配的字符。貌似要抓取数字PK,做的应该是:
r'^(?P<cid>\d+)/
这里有几点需要注意。
正则表达式,可能是这里的实际问题
在 url regex
中捕获 cid
不包含正确的捕获组。由于它是一个 ID,因此您应该只捕获带有 \d+
url(r'^(?P<cid>\d+)/', ToDoListView.as_view(), name='todo_list'),
关闭 url 正则表达式
当前 url 不包含结束符号。如果 url 实际上在 /app/<id>/
之后结束,您很可能应该用美元符号 $
.
url(r'^(?P<cid>\d+)/$', ToDoListView.as_view(), name='todo_list'),
命名空间使用
您正在使用 name
,同时包含 todo
应用程序 url。要正确使用命名空间,您应该在 todo/
url 中删除名称并添加
namespace
到 include.
url(r'^todo/', include('todo.urls', namespace='todo'))
现在您可以在模板中使用命名空间
{% url 'todo:todo_list' cid=obj.company.id %}