2013-08-24 16 views
5

Robię swoje pierwsze kroki w Python/Django i napisałem przykładową aplikację z wieloma aplikacjami Django w jednym projekcie Django. Teraz dodałem kolejną aplikację o nazwie "pulpit", w której chciałbym wyświetlać dane z różnych aplikacji. W tej chwili nadal korzystać z tej prostej klasy oparte ogólny pogląd, który pokazuje wpisy moje małe kontaktów aplikacji na desce rozdzielczej:Odwołaj się do wielu modeli w widoku/szablonu w 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',), 

W dashboard.html zrobić:

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

Może ktoś wyjaśnić do początkujących, jak dostęp do wielu m odele w moim szablonie? Chcę pokazać nie tylko kontakty z aplikacji "kontakty", ale także dane z innych aplikacji, takich jak moja aplikacja "inwentarzowa" i trzecia aplikacja.

wiem, muszę go importować:

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

Ale to, co musi być zrobione, aby przekazać wszystkie te dane do mojego pojedynczego szablonu przy użyciu widoku? A jak mogę uzyskać dostęp do tych danych w moim szablonie?

Rozwiązaniem może być Django Pass Multiple Models to one Template, ale muszę przyznać, że tak naprawdę go nie rozumiem.

Odpowiedz

8

trzeba zastąpić metodę get_context_data i przekazać cokolwiek chcesz w kontekście:

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

dodać do Aamir za odpowiedź

w html byś zrobił:

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

w celu odniesienia do obiektów modelu "kontaktu"

i

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

odwołać model "ankiety" obiekty

(to nie był intuicyjny do mnie na początku).

Powiązane problemy