Django:可从所有视图访问常规查询

时间:2018-09-19 06:27:16

标签: django django-queryset

对于一般查询,我有些困惑。我有一个模型,其中包含与这些客户相关的类客户信息和具有注释的类。

我想在base.html模板中添加一个Info标记,在其中可以看到最近创建的注释。因此它应该在所有模板/视图中可见。

lastCom = Comment.objects.order_by('-id').last()

问题是我想一次定义查询,而不是分别为每个视图定义查询。

您是否暗示如何仅在一个位置定义查询并在每个模板中访问它而不在每个视图中定义查询?

选择模型管理器,ListViews等的方式。

1 个答案:

答案 0 :(得分:5)

您可以编写自定义context processor

def last_comment(request):
    return {'lastComm': Comment.objects.order_by('-id').last()}

在设置模块中,您应该将其添加到TEMPLATES设置中:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'path.to.processor.last_comment'
            ],
        },
    },
]

这会将lastComm变量添加到每个模板。