7

私は Python/Django で最初の一歩を踏み出し、1 つの Django プロジェクトで複数の Django アプリを使用するサンプル アプリケーションを作成しました。ここで、さまざまなアプリからのデータを表示したい「ダッシュボード」という別のアプリを追加しました。現時点では、ダッシュボードに私の小さな連絡先アプリのエントリを表示する、この単純なクラスベースの汎用ビューをまだ使用しています。

ビュー.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>

テンプレートで複数のモデルにアクセスする方法を初心者に説明できる人はいますか? 「連絡先」アプリの連絡先だけでなく、「在庫」アプリや 3 番目のアプリなどの他のアプリのデータも表示したいと考えています。

私は知っています、私はそれをインポートする必要があります:

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

しかし、ビューを使用して単一のテンプレートにこのすべてのデータを渡すにはどうすればよいでしょうか? テンプレートでそのデータにアクセスするにはどうすればよいですか?

解決策はDjango Pass Multiple Models to one Template にあるかもしれませんが、私はそれを本当に理解していないことを告白しなければなりません.

4

2 に答える 2

14

メソッドをオーバーライドし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
于 2013-08-24T14:32:33.750 に答える
1

アーミールの答えに追加するには

html で次のようにします。

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

「接触」モデルオブジェクトを参照する

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

「投票」モデル オブジェクトを参照するには

(これは最初は直感的ではありませんでした)。

于 2016-11-01T07:06:30.050 に答える