【问题标题】:Django "get() got an unexpected keyword argument 'pk'" errorDjango“get()得到了一个意外的关键字参数'pk'”错误
【发布时间】:2015-05-14 17:43:14
【问题描述】:

我正在尝试重定向到一个我打算在创建后作为对象主页实现的页面。

下面是我的views.py的对应部分

            new_station_object.save()
            return HttpResponseRedirect(reverse("home_station", 
                                                kwargs={'pk':   new_station_object.id}
            ))

class StationHome(View):
    def get(self, request):
        return HttpResponse("Created :)")

以及我的 urls.py 的相应部分;

    url(r'^station/(?P<pk>\d+)$', StationHome.as_view(),    name='home_station'),

但是我得到了上述错误;

TypeError at /station/2
get() got an unexpected keyword argument 'pk'

请有人帮帮我。

【问题讨论】:

    标签: django


    【解决方案1】:

    函数得到的参数比它应该得到的多一个。 改成:

    def get(self, request, pk):
    

    pk 的值将等于已匹配的模式,并且由于您已指定它将是一个数字,因此 pk 的类型将为 int。

    【讨论】:

    • 它仍然作为关键字参数传入,因此将出现在 **kwargs 中。在调试器中运行它,它就会在那里。
    • docs.djangoproject.com/en/1.8/topics/http/urls/#named-groups 您在 URL 正则表达式 (P) 中使用了命名参数,正如文档所说,它将作为关键字参数传入。并且错误明确表示“意外的关键字参数”。
    • 如果有更多的参数被添加到 url,它可以让你的代码更加面向未来。您的答案是使用位置参数 - 您现在已在评论中更改。
    • 没错,既然你给了它一个默认值,它就会把它当作一个关键字参数。您发布的答案不是
    • 您将其作为关键字参数传入并尝试将其作为位置参数进行检索。 stackoverflow.com/questions/1419046/…
    【解决方案2】:

    将 kwargs 添加到方法定义中:

    def get(self, request, *args, **kwargs):
        return HttpResponse("Created :)")
    

    【讨论】:

    【解决方案3】:

    检查您的 views.fun_name 是否与视图中的函数名称相同

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2020-05-14
      • 2016-12-08
      • 1970-01-01
      • 2021-10-25
      • 2021-08-05
      相关资源
      最近更新 更多