You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:02