首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:从DetailView上下文向模板传递值不起作用

Django:从DetailView上下文向模板传递值不起作用
EN

Stack Overflow用户
提问于 2015-10-03 20:58:34
回答 2查看 619关注 0票数 0

在尝试呈现我的item_detail模板(它在指向item_update视图的链接中使用url标记)时,我看到了以下错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
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 context

urls.py

代码语言:javascript
复制
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

代码语言:javascript
复制
<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,它为什么要工作?非常感谢你,嘉莉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-03 22:25:52

我认为这是一个错误:

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
from myapp.views import ItemDetailView

url(r'^(?P<course_id>[0-9]+)/items/(?P<pk>[0-9]+)/$', ItemDetailView.as_view(), name='item_detail'),
票数 3
EN

Stack Overflow用户

发布于 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或只将变量打印到日志中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32927434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档