Django CreateView重写get_context_data后表单消失 如何展示高频标签
问题原因
你重写AddPostView的get_context_data方法时,没有继承父类CreateView生成的默认上下文,直接创建了仅包含common_tags的全新上下文对象,父类原本会自动注入到上下文的表单对象form被覆盖丢弃,模板无法读取到form变量,自然就不会渲染表单区域。
修复方案
修改get_context_data方法的实现,先调用父类的get_context_data方法拿到包含表单的默认上下文,再将高频标签变量追加到上下文即可,修改后的代码如下:
class AddPostView(CreateView): model = Post form_class = AddPostForm template_name = 'add_post.html' def get_context_data(self, **kwargs): # 调用父类方法获取默认上下文(包含form对象) context = super().get_context_data(**kwargs) # 追加高频标签变量 common_tags = Post.tags.most_common()[:4] context['common_tags'] = common_tags return context # 获取当前登录用户作为发帖作者 def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form)
修改后上下文里同时存在父类注入的form和你自定义的common_tags,表单就能正常渲染,同时也能拿到高频标签数据做展示。
内容的提问来源于stack exchange,提问作者Anas Baheh
相关产品推荐
相关产品推荐

