2017-01-16 3 views
3

Ich habe eine Vorlage, aus der ich Informationen aus mehreren Modellen rendern muss. Mein models.py in etwa so aussehen:Django Vorlage mit mehreren Modellen

# models.py 
from django.db import models 

class foo(models.Model): 
    ''' Foo content ''' 

class bar(models.Model): 
    ''' Bar content ''' 

Ich habe auch eine Datei views.py, von dem ich nach schrieb this Django documentation und the answer given here und sieht etwa so aus:

# views.py 
from django.views.generic import ListView 
from app.models import * 

class MyView(ListView): 
    context_object_name = 'name' 
    template_name = 'page/path.html' 
    queryset = foo.objects.all() 

    def get_context_data(self, **kwargs): 
     context = super(MyView, self).get_context_data(**kwargs) 
     context['bar'] = bar.objects.all() 

     return context 

und meine urlpatterns auf urls.py haben folgendes Objekt:

url(r'^path$',views.MyView.as_view(), name = 'name'), 

Meine Frage ist, auf der Vorlagenseite/path.html wie kann ich verweisen die Objekte und die Objekteigenschaften von f oo und bar, um sie auf meiner Seite anzuzeigen?

Antwort

1

Um den Zugriff foos aus Ihrer Vorlage, müssen Sie es im Kontext gehören:

# views.py 
from django.views.generic import ListView 
from app.models import * 
class MyView(ListView): 
    context_object_name = 'name' 
    template_name = 'page/path.html' 
    queryset = foo.objects.all() 

    def get_context_data(self, **kwargs): 
     context = super(MyView, self).get_context_data(**kwargs) 
     context['bars'] = bar.objects.all() 
     context['foos'] = self.queryset 
     return context 

Jetzt in Ihrer Vorlage können Sie den Wert zugreifen, indem Sie den Schlüssel verweisen, die Sie verwenden, wenn Sie das Kontext Wörterbuch in get_context_data Schaffung :

<html> 
<head> 
    <title>My pathpage!</title> 
</head> 
<body> 
    <h1>Foos!</h1> 
    <ul> 
{% for foo in foos %} 
    <li>{{ foo.property1 }}</li> 
{% endfor %} 
    </ul> 

    <h1>Bars!</h1> 
    <ul> 
{% for bar in bars %} 
    <li>{{ bar.property1 }}</li> 
{% endfor %} 
    </ul> 
</body> 
</html> 
-1

Für den einfachsten Fällen verwenden Sie einfach die üblichen Konstruktionen django Template-Sprache, forloop -tag und {{}} variable Notation:

{% for b in bar %} # should be called 'bars' in the context, really 
    {{ b }}   # will render str(b) 
    {{ b.id }}   # properties, fields 
    {{ b.get_stuff }} # callables without parentheses 
{% endfor %} 

die template language docs Siehe für mehr.