Python 具有ListView的自定义ContextProcessor-未显示在模板中

Python 具有ListView的自定义ContextProcessor-未显示在模板中,python,django,django-class-based-views,Python,Django,Django Class Based Views,几年后我回到了django,我采用了基于类的视图——当然是个粉丝,但由于某些原因,我无法让我的自定义内容处理器显示其数据。我在应用程序上使用的大多数是通用视图,据我所知,它们应该自动为视图提供上下文 这是我的上下文处理器(context_processors.py) 请注意,当我打印字典时,它会显示在我的控制台中,因此我知道它正在启动。 它是在“我的设置”中设置的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.d

几年后我回到了django,我采用了基于类的视图——当然是个粉丝,但由于某些原因,我无法让我的自定义内容处理器显示其数据。我在应用程序上使用的大多数是通用视图,据我所知,它们应该自动为视图提供上下文

这是我的上下文处理器(context_processors.py)

请注意,当我打印字典时,它会显示在我的控制台中,因此我知道它正在启动。

它是在“我的设置”中设置的

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',
                'part_iq.context_processors.context_alerts'
            ],
        },
    },
]
最后,这是一个示例视图-我有大约20个,所有标准的基于类的视图:

class BuyerRfqList(ListView):
    context_object_name = "rfqs"
    template_name = "dashboard/buyer/rfq-list.html"

    def get_queryset(self):

        user = self.request.user
        rfqs = Rfq.objects.filter(from_user=user, hidden=False).order_by("created_at")

        return rfqs
我只是简单地在模板中输出警报(尝试dict的名称和上下文处理器函数):

没有运气

我觉得这是显而易见的,但我对Django太生疏了,对ClassBasedView也太陌生了,无法解决两个问题:

  • 在“警报列表”字典中没有名为“计数”的键。该模板实际上被转换为
    alert_list['count']
    (因为#2)它不存在,所以它只是默默地失败

  • Django模板中的字典可以像对象一样访问

  • 所以
    alert\u列表['alerts']

    相当于

    {{alert_list.alerts}}

    现在您可以在Queryset上调用
    count


    {{alert\u list.alerts.count}

    模板中没有任何名为
    alerts\u list
    的内容。这只是您在函数中使用的本地名称,用于保存要传递给模板的变量的dict。这段话的内容被直接添加到上下文中:这样你就可以访问
    {{alerts}
    {{unread\u count}}

    谢谢你的回答,但我很抱歉-我把我的初始问题搞糟了,我的模板(编辑)中确实有{alert\u list.unread\u count}}。计数是指那些未读的数据(与查询集中的所有数据相比)。+1表示答案
    class BuyerRfqList(ListView):
        context_object_name = "rfqs"
        template_name = "dashboard/buyer/rfq-list.html"
    
        def get_queryset(self):
    
            user = self.request.user
            rfqs = Rfq.objects.filter(from_user=user, hidden=False).order_by("created_at")
    
            return rfqs
    
    {{alert_list.unread_count}}
    {{context_alerts.unread_count}}