2013-08-24 55 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 %} 

引用了“民意调查”模型对象

(这是不是第一次直观的给我)。