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

如何让BaseView的setup方法中定义的mydata自动传入模板?

解决方法

要让BaseView中定义的mydata自动添加到模板上下文,不用每个子类手动拼接,你可以在BaseView里新增一个获取基础上下文的方法,子类调用这个方法来合并自己的上下文内容。

步骤1:修改BaseView,添加上下文方法

在BaseView中新增get_context_data方法,把mydata加入上下文:

class BaseView(View):
    def setup(self, request, *args, **kwargs):
        super().setup(request, *args, **kwargs)
        self.mydata = table.objects.all()

    def get_context_data(self, **kwargs):
        # 初始化上下文,优先用传入的kwargs,没有则新建空字典
        context = kwargs.get('context', {})
        # 把mydata加入上下文
        context['mydata'] = self.mydata
        return context

步骤2:修改子类的get方法,合并上下文

在子类的get方法中,调用父类的get_context_data来合并你的自定义上下文,这样mydata就会自动被加入到模板可用的变量里:

def get(self, request, pk=''):
    print('self.active_apps in plan')
    print(self.active_apps)
    
    # 先构建自己需要的上下文内容
    user_info = request.session.get('user_info')
    context = {'user_info': user_info}
    
    if pk != '':
        item = get_object_or_404(self.model_class, pk=pk)
        form = self.form_class(instance=item)
        context['form'] = form
        context['pk'] = pk
    else:
        form = self.form_class()
        context['form'] = form

    # 调用父类方法,把mydata加入上下文
    context = self.get_context_data(context=context)
    
    return render(request, self.template_name, context)

或者更简洁的写法,先获取父类的基础上下文,再往里面加自己的内容:

def get(self, request, pk=''):
    print('self.active_apps in plan')
    print(self.active_apps)
    
    # 先获取父类的基础上下文(已经包含mydata)
    context = self.get_context_data()
    
    # 添加自己的内容到上下文
    user_info = request.session.get('user_info')
    context['user_info'] = user_info
    
    if pk != '':
        item = get_object_or_404(self.model_class, pk=pk)
        form = self.form_class(instance=item)
        context['form'] = form
        context['pk'] = pk
    else:
        form = self.form_class()
        context['form'] = form

    return render(request, self.template_name, context)

这样修改后,所有继承BaseView的子类,只要调用get_context_data方法,mydata就会自动出现在模板中,不用再手动添加。

内容的提问来源于stack exchange,提问作者NASRIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:20