2016-11-26 82 views
0

我有我的觀點定義如下:Django的額外的上下文項目

class HomeView(TemplateView): 
    template_name = "home.html" 

    def get_context_data(self, **kwargs): 
     context = super(HomeView, self).get_context_data(**kwargs) 
     context['items'] = Item.objects.all() 
     return context 

    def get(self, request, *args, **kwargs): 

     #Getting data from an api call here 
     response = api.get_some_items() 
     list_with_items = [] 
     for i, item in enumerate(response): 
      list_with_items.append(item.name) 

     template = loader.get_template('home.html') 
     context = self.get_context_data(**kwargs) 
     context['extra_items'] = list_with_items 

     return HttpResponse(template.render(context, request)) 

在通過列表如下模板我循環,但它似乎並沒有呈現來自這方面,我知道什麼因爲我把{% empty %}標籤放在那裏。

{% for item in items %} 
    {{ item }} 
{% empty %} 
    <p>No items</p> 
{% endfor %} 

這裏出了什麼問題?

編輯:當我把一絲的HttpResponse前右,context['extra_items']返回列表中的所有項目,但它並沒有呈現到模板

回答

3

我認爲你是基於類的意見搞亂。你爲什麼要用TemplateView這個?

你可以嘗試這樣的事情,而不是:

from django.views.generic.list import ListView 


class HomeView(ListView): 
    model = Item 
    context_object_name = 'items' 
    template_name = "home.html" 

    def get_context_data(self, **kwargs): 
     context = super(HomeView, self).get_context_data(**kwargs) 
     response = api.get_some_items() 
     list_with_items = [] 
     for i, item in enumerate(response): 
      list_with_items.append(item.name) 
     context['extra_items'] = list_with_items 
     return context 
+0

啊,他們這樣做顯示現在的確,謝謝! – dnsko