没有 kwargs 调用 Django 视图

Django view being called with no kwargs

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

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

和对应的url定义:

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

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

AttributeError: Generic detail view LocationView must be called with either an object pk or a slug.

经过大量挖掘,我发现在线的某个地方,self.pk_url_kwarg'location_id' 更改为 ('location_id', ),这导致视图在以下情况下无法检索对象的 pk它运行 self.kwargs.get(self.pk_url_kwarg) 因为 self.kwargs 中的键 none 与修改后的 pk_url_kwarg 值匹配。

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

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

这是因为你已经将它设置为一个元组:

pk_url_kwarg = 'location_id',

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

pk_url_kwarg = 'location_id'