代码之家  ›  专栏  ›  技术社区  ›  user2896120

typeerror:post()得到意外的关键字参数“slug”

  •  1
  • user2896120  · 技术社区  · 7 年前

    我有一个显示用户配置文件页的详细视图。配置文件采用了一个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 回复  |  直到 7 年前
        1
  •  2
  •   neverwalkaloner    7 年前

    你应该加上 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 方法完全是多余的。