没有 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'
我有一个名为 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'