请参阅Django中的View / Template中的多个模型

时间:2013-08-24 13:55:56

标签: python django templates django-models

我正在使用Python / Django完成我的第一步,并在一个Django项目中编写了一个带有多个Django应用程序的示例应用程序。现在我添加了另一个名为“dashboard”的应用程序,我想显示来自不同应用程序的数据。目前我仍然使用这个简单的基于类的通用视图,它在仪表板上显示我的小联系人-App的条目:

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>

有人可以向初学者解释如何在我的模板中访问多个模型吗?我不仅要展示我的“联系人”应用中的联系人,还要展示其他应用中的数据,例如我的“广告资源”应用和第三个应用。

我知道,我必须导入它:

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

但是要使用视图将所有这些数据传递给我的单个模板需要做些什么?我如何在模板中访问该数据?

解决方案可能在Django Pass Multiple Models to one Template,但我必须承认我并不理解它。

2 个答案:

答案 0 :(得分:10)

您需要覆盖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

答案 1 :(得分:0)

添加到Aamir的答案

你会做的HTML中的

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

引用“联系人”模型对象

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

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

(起初这对我来说并不直观)。