2012-02-06 103 views
2

在按照Django的教程之後,我已啓動並運行我的應用程序的基線,但現在我正嘗試將一些數據添加到其中一個模板。我想我可以通過使用extra_context添加這個,但我缺少一些東西(可能很明顯,因爲我是Django的新手)。這是我在我的應用程序的urls.py:無法將extra_context添加到ListView中

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', 
     )), 

我得到的錯誤是類型錯誤:
的ListView()收到無效關鍵字「extra_context中用」

我需要做的就是以某種方式將這些款項拿到模板上以便我可以展示它們。我如何正確或容易地做到這一點?

回答

8

extra_context需要一個字典,即:

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

編輯

對不起,其實我不認爲as_view實際上支持kwarg。你可以嘗試,但最有可能你需要繼承的觀點和覆蓋get_context_datadocs描述:

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 
+0

這不是一個真正的答案。問題是關於使用文檔中描述的extra_context關鍵字。 – fariza 2013-02-11 15:24:41

+1

其實正確的答案是。基於類的通用視圖不再支持extra_context關鍵字 – fariza 2013-02-11 17:20:24

+0

正如本問題的答案所述:[從direct_to_template移到Django中的新TemplateView](http://stackoverflow.com/questions/11005733/moving-from-直接添加到template-to-new-templateview-in-django),添加extra_context的唯一方法是對通用視圖進行子類化並提供您自己的get_context_data方法 – stephendwolff 2013-06-06 10:28:33

0

Django的,1.5似乎不支持extra_context中用在as_view。但是你可以定義一個子類並覆蓋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中用應該是一個字典。

希望這有助於:)