Django视图被调用没有kwargs

时间:2017-07-22 17:54:40

标签: django python-3.x django-class-based-views

我有一个名为django.views.generic.DetailView的基于LocationView的类,其设置如下:

class LocationView(DetailView):
    model = Location
    pk_url_kwarg = 'location_id',
    template_name = 'accounts/locations/view_location.html'

相应的网址定义:

url(
    r'^accounts/(?P<account_id>\d+)/locations/(?P<location_id>\d+)/$'
    LocationView.as_view(),
    name='view_location',
)

当我尝试在浏览器中访问LocationView时,出现以下异常:

  

AttributeError:通用详细信息视图必须使用调用LocationView   对象pk或slug。

经过大量挖掘后,我发现沿线的某个地方,self.pk_url_kwarg'location_id'更改为('location_id', ),导致视图无法检索到对象&#39; s pk运行时self.kwargs.get(self.pk_url_kwarg),因为self.kwargs中没有任何键与修改后的pk_url_kwarg值匹配。

为什么会发生这种情况,我该如何解决?

django.VERSION == (1, 11, 'final', 0)

1 个答案:

答案 0 :(得分:2)

这是因为您已将其设置为元组:

pk_url_kwarg = 'location_id',

注意尾随的逗号。这就是将声明变成元组的原因。要修复它,只需删除逗号:

pk_url_kwarg = 'location_id'