无法将extra_context添加到ListView

时间:2012-02-06 22:43:31

标签: django

在遵循Django教程之后,我已启动并运行了我的应用程序的基线,但现在我正在尝试将一些数据添加到其中一个模板中。我想我可以通过使用extra_context来添加它,但我遗漏了一些东西(很明显,因为我是Django的新手)。这就是我在我的应用程序中的urls.py:

url(r'^$', ListView.as_view(
        queryset=Solicitation.objects.order_by('-modified'),
        context_object_name='solicitationList',
        template_name='ptracker/index.html',
        extra_context=Solicitation.objects.aggregate(Sum('solicitationValue'),Sum('anticipatedValue')),
        name='index',
        )),

我得到的错误是TypeError:
ListView()收到无效关键字'extra_context'

我需要做的是以某种方式将这些总和输出到模板,以便我可以显示它们。我该如何正确或轻松地做到这一点?

2 个答案:

答案 0 :(得分:10)

extra_context需要一个字典,即:

extra_context={'solicitations': Solicitation.objects...}

修改

很抱歉,实际上,我认为as_view实际上不支持那个kwarg。您可以尝试一下,但很可能您需要对视图进行子类化并覆盖get_context_data,因为docs描述:

def get_context_data(self, **kwargs):
    # Call the base implementation first to get a context
    context = super(PublisherBookListView, self).get_context_data(**kwargs)
    # Add in the publisher
    context['publisher'] = self.publisher
    return context

答案 1 :(得分:0)

Django,1.5似乎不支持as_view中的extra_context。但是您可以定义子类并覆盖get_context_data。 我认为这更好:

class SubListView(ListView):
    extra_context = {}
    def get_context_data(self, **kwargs):
        context = super(self.__class__, self).get_context_data(**kwargs)
        for key, value in self.extra_context.items():
            if callable(value):
                context[key] = value()
            else:
                context[key] = value
        return context

仍然,extra_context应该是一个字典。

希望这会有所帮助:)