2013-08-24 82 views
5

我正在用Python/Django開始我的第一步,並在一個Django項目中編寫了一個包含多個Django應用程序的示例應用程序。現在我添加了另一個名爲「儀表板」的應用程序,我希望顯示來自不同應用程序的數據。目前,我仍然使用這個簡單的基於類的通用視圖,顯示在儀表盤上我的小觸點-App的條目:在Django中查看/模板中的多個模型

views.py:

from django.views.generic import ListView 
from contacts.models import Contact 

class ListDashboardView(ListView): 
    model = Contact 
    template_name = 'dashboard.html' 

urls.py:

url(r'^$', dashboard.views.ListDashboardView.as_view(), 
    name='dashboard-list',), 

在dashboard.html我做的:

<ul> 
    {% for contact in object_list %} 
    <li class="contact">{{ contact }}</li> 
    {% endfor %} 
</ul> 

任何人都可以解釋給初學者如何訪問m倍odels在我的模板中?我不僅要顯示來自「聯繫人」應用的聯繫人,還要顯示其他應用的數據,例如我的「庫存」應用和第三方應用。

我知道,我必須將其導入:

from inventory.models import Asset 
from polls.models import Poll 

但是必須做所有這些數據傳遞給我的使用視圖單個模板?我怎樣才能訪問我的模板中的數據?

解決方案可能在Django Pass Multiple Models to one Template,但我必須承認我並不真正瞭解它。

回答

8

你需要重寫get_context_data方法並傳遞任何你想在上下文中:

class ListDashboardView(ListView): 
    model = Contact 
    template_name = 'dashboard.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(ListDashboardView, self).get_context_data(**kwargs) 
     ctx['polls'] = Poll.objects.all() 
     return ctx 
0

在HTML添加到阿米爾的答案

你會怎麼做:

{% for contact in object_list %} 
<li>{{contact.object}}</li> 
{% endfor %} 

以引用「接觸」模型對象

{% for x in polls %} 
<li>{{ x.object }}</li> 
{% endfor %} 

引用了「民意調查」模型對象

(這是不是第一次直觀的給我)。