我有一个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。但是,当我提交表单时,我会得到一个空白页面,其中没有关于用户的详细信息。我们被重定向到同一页面,但这次没有关于用户配置文件的值。我做错了什么?
答案 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
方法,因为它是多余的。