在模板中自动添加变量

问题描述 投票:0回答:1

我在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 django-generic-views
1个回答
0
投票

您正在寻找的可能是不是在视图中添加它,而是一个上下文处理器[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

© www.soinside.com 2019 - 2024. All rights reserved.