我在BaseView的设置功能中添加了mydata。
class BaseView(View): def setup(self, request, *args, **kwargs): super().setup(request, *args, **kwargs) self.mydata = table.objects.all()
当我在子类的 get 函数中打印它时,该值是正确的,但我希望这个变量自动添加到模板文件中。
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 return render(request, self.template_name, context)
您正在寻找的可能是不是在视图中添加它,而是一个上下文处理器[Django-doc]。
我们可以定义这样的上下文处理器:
# my_app/context_processors.py
def table_data(request):
return {'my_data': table.objects.all()}
然后在
settings.py
中注册上下文处理器:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
# …,
'context_processors': [
# …,
'my_app.context_processors.table_data'
]
},
}
]
每次使用此后端渲染模板时,都会运行上下文处理器以进一步填充上下文。
由于查询集是惰性的,如果模板不“消耗”
my_data
,它也不会发出请求。但现在如果我们这样渲染一个模板,我们就可以枚举 my_data
。