【问题标题】:TypeError: post() got an unexpected keyword argument 'slug'TypeError: post() 得到了一个意外的关键字参数“slug”
【发布时间】:2023-03-09 23:19:01
【问题描述】:

我有一个显示用户个人资料页面的 DetailView。该配置文件采用作为 URL 一部分的 slug 名称。例如,/profile/john/ 其中john 是用户名,我们在 john 的个人资料中。如图所示:

class ProfileView(DetailView):
    model = User
    slug_field = 'username'
    template_name = 'oauth/profile.html'
    context_object_name = 'user_profile' 

    def post(self, request):
        return render(request, self.template_name)

现在,每当我提交表单时,都会收到一条错误消息:TypeError: post() got an unexpected keyword argument 'slug' 知道了这一点,我在 post 方法中添加了一个新参数,即 slug。但是,当我提交表单时,我得到一个空白页面,其中没有关于用户的详细信息。我们被重定向到同一页面,但这次没有关于用户配置文件的值。我做错了什么?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您还应该添加slug 作为方法参数:

    def post(self, request, slug):
        return render(request, self.template_name)
    

    您还需要将上下文传递给模板:

    def post(self, request, slug):
        self.object = self.get_object()
        context = self.get_context_data(object=self.object)
        return render(request, self.template_name, context=context)
    

    但实际上,由于您的帖子没有向视图添加特定逻辑,您可以调用super

    def post(self, request, slug):
        return super().post(request, slug)
    

    或者干脆删除 post 方法,因为它是多余的。

    【讨论】:

    • 我做到了,我已经写了当我在问题中这样做时发生的事情,由于某种原因它仍然无法正常工作。它显示相同的页面,但没有用户个人资料详细信息
    • @user2896120 您需要将上下文传递给模板。
    • 我明白了,所以我们想要获取当前配置文件对象的上下文数据,然后我们将该上下文数据传递给页面渲染
    • 我确实有逻辑,但我删除了它以使事情变得更简单。就算我有逻辑,还是多余吗?
    • @user2896120 啊,不,如果你实现一些自定义逻辑,那么它不是多余的。
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2020-11-16
    相关资源
    最近更新 更多