在尝试呈现我的item_detail模板(它在指向item_update视图的链接中使用url标记)时,我看到了以下错误:
NoReverseMatch at /mcadb/27/items/17
Reverse for 'item_update' with arguments '()' and keyword arguments '{u'course_id': '', u'pk': 17}' not found. 1 pattern(s) tried: [u'mcadb/(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/update/$']与尝试过的模式匹配的问题是什么?是因为u吗?我不知道为什么会这样。
在views.py中,我尝试将'course_id‘添加到DetailView的上下文中。我试着把“course_id”从图中取出来(我不知道为什么是空的)
views.py
class ItemDetailView(DetailView):
DetailView.model=Item
template_name='mcadb/item_detail.html'
def get_context_data(self, **kwargs):
context = super(ItemDetailView, self).get_context_data(**kwargs)
context['course_id'] = self.kwargs['course_id']
return contexturls.py
url(r'^(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='item_detail'),
url(r'^(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/update/$', views.ItemUpdate.as_view(), name='item_update'),item_detail.html
<a href="{% url 'mcadb:item_update' course_id=course_id pk=item.id %}">Edit Item</a>问题是'course_id=course_id‘行。如果我将它更改为'course_id=26',item_detail.html就会显示得很好。
我有两个问题。1.这个错误意味着什么,当它看起来像预期的那样传递两个kwargs时? 2.如果我硬编码一个course_id,它为什么要工作?非常感谢你,嘉莉
发布于 2015-10-03 22:25:52
我认为这是一个错误:
url(r'^(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='item_detail'),注意,您使用的是一个通用的DetailView (来自django.views.generic.DetailView)和这个url。
您需要使用自己的视图myapp.views.ItemDetailView。
所以在您的urls.py文件中:
from myapp.views import ItemDetailView
url(r'^(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/$', ItemDetailView.as_view(), name='item_detail'),发布于 2015-10-03 21:42:08
对您的准确错误的解释如下:
“item_update”与参数'()‘和关键字参数’{u‘found _id’:'',u‘’pk: 17}‘没有找到。尝试了1种模式:[U‘’mcadb/(?P0-9+)/items/(?P0-9+)/update/$‘]
正如您所看到的,反向得到的是空的course_id,并且URL不能用空构建,因为必须至少有一个数字(在regex模式中必须有+符号)。因此,将course_id传递到上下文或url标记显然有问题。尝试在url标记旁边打印该变量并检查它的值。检查是否可以访问模板中其他地方的变量(可能在所有for循环、includes和with标记之外),以及是否可以从视图直接访问它(尝试使用反向创建URL或只将变量打印到日志中)。
https://stackoverflow.com/questions/32927434
复制相似问题