TypeError:post()得到了一个意外的关键字参数' slug'

时间:2018-06-06 05:12:38

标签: python django

我有一个DetailView,显示用户的个人资料页面。该配置文件采用一个slug名称,该名称是URL的一部分。例如,/profile/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。但是,当我提交表单时,我会得到一个空白页面,其中没有关于用户的详细信息。我们被重定向到同一页面,但这次没有关于用户配置文件的值。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您还应添加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方法,因为它是多余的。