【问题标题】:Django view being called with no kwargs没有 kwargs 调用 Django 视图
【发布时间】:2017-07-22 17:54:40
【问题描述】:

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

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: 通用详细视图 LocationView 必须调用 对象 pk 或 slug。

经过大量挖掘,我发现在某处,self.pk_url_kwarg'location_id' 更改为('location_id', ),这导致视图在运行self.kwargs.get(self.pk_url_kwarg) 时无法检索对象的pk,因为没有self.kwargs 中的键匹配修改后的 pk_url_kwarg 值。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    pk_url_kwarg = 'location_id',
    

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

    pk_url_kwarg = 'location_id'
    

    【讨论】:

    • 是的,就是这样!只要它允许我就标记为答案。我是一个如释重负的白痴!
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多