2017-02-08 5 views
0

Wie geht das Gleiche für die Detailansicht?Django mehrere Modelle in einer Vorlage anzeigen

views.py

class ViewProfile(generic.DetailView): 
    model = User 
    slug_field = 'username' 
    template_name = 'profile/profile_view.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(ViewProfile, self).get_context_data(**kwargs) 
     ctx['profile'] = Profile.objects.all() 
     return ctx 

profile_view.html

<h1>{{ user.username }}</h1> 
{% for profile in profile %} 
<p>{{ profile.full_name }}</p> 
{% endfor %} 

ich nur die erste in der Liste als Detailansicht angezeigt werden müssen. irgendwelche Methoden?

+0

Sie haben die iterierte Variable den gleichen Namen wie der Iterator gegeben, machen Sie sie einfach anders – Sayse

+0

ich bin Anfänger .. können Sie ein Beispiel zeigen? –

Antwort

0

Sie haben die iterierten Variable den gleichen Namen wie die Iterator gegeben, nur um sie

{% for prof in profile %} 
<p>{{ prof.full_name }}</p> 
{% endfor %} 
+0

Ich zeige keine Liste an. es ist ein einzelner Gegenstand. for-Schleife wird nur für die Listenansicht verwendet, oder? Derzeit iam Hinzufügen von Scheibe, um nur das erste Element zu erhalten. –

+0

Sie haben Ihren Kontextdaten bereits 'profile' hinzugefügt, eine for-Schleife ist für iterierbare Daten. – Sayse

0

Verwenden first() method auf queryset

views.py

class ViewProfile(generic.DetailView): 
    model = User 
    slug_field = 'username' 
    template_name = 'profile/profile_view.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(ViewProfile, self).get_context_data(**kwargs) 
     # profile in your context will contain only the first profile 
     ctx['profile'] = Profile.objects.all().first() 
     return ctx 

anders machen profile_view.html

Sie können auch order_by() method verwenden, um die Reihenfolge Ihres Abfrage-Sets zu ändern.

Verwandte Themen