我有一个显示用户个人资料页面的详细信息视图。配置文件采用作为 URL 一部分的辅助信息域名称。例如,/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。但是,当我提交表单时,我得到一个空白页,没有关于用户的详细信息。我们被重定向到同一页面,但这次没有关于用户配置文件的值。我做错了什么?
您还应该添加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
方法,因为它是多余的。